diff --git a/CHANGELOG.md b/CHANGELOG.md index ce309cc1e5..1ca69f5ca9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added `order_queryset` report helper function in [#10439](https://github.com/inventree/InvenTree/pull/10439) +- Added `SupplierMixin` to import data from suppliers in [#9761](https://github.com/inventree/InvenTree/pull/9761) - Added much more detailed status information for machines to the API endpoint (including backend and frontend changes) in [#10381](https://github.com/inventree/InvenTree/pull/10381) - Added ability to partially complete and partially scrap build outputs in [#10499](https://github.com/inventree/InvenTree/pull/10499) - Added support for Redis ACL user-based authentication in [#10551](https://github.com/inventree/InvenTree/pull/10551) diff --git a/docs/docs/assets/images/part/import_part.png b/docs/docs/assets/images/part/import_part.png new file mode 100644 index 0000000000..94bdb55601 Binary files /dev/null and b/docs/docs/assets/images/part/import_part.png differ diff --git a/docs/docs/assets/images/part/import_part_wizard.png b/docs/docs/assets/images/part/import_part_wizard.png new file mode 100644 index 0000000000..e20e16b1b5 Binary files /dev/null and b/docs/docs/assets/images/part/import_part_wizard.png differ diff --git a/docs/docs/assets/images/part/import_supplier_part.png b/docs/docs/assets/images/part/import_supplier_part.png new file mode 100644 index 0000000000..2d9c7bb833 Binary files /dev/null and b/docs/docs/assets/images/part/import_supplier_part.png differ diff --git a/docs/docs/assets/images/part/new_part.png b/docs/docs/assets/images/part/new_part.png deleted file mode 100644 index 3331a87ca1..0000000000 Binary files a/docs/docs/assets/images/part/new_part.png and /dev/null differ diff --git a/docs/docs/assets/images/part/new_parts_dropdown.png b/docs/docs/assets/images/part/new_parts_dropdown.png new file mode 100644 index 0000000000..dfa5cf5aa6 Binary files /dev/null and b/docs/docs/assets/images/part/new_parts_dropdown.png differ diff --git a/docs/docs/develop/contributing.md b/docs/docs/develop/contributing.md index 4a404c5868..479e6813c6 100644 --- a/docs/docs/develop/contributing.md +++ b/docs/docs/develop/contributing.md @@ -186,6 +186,10 @@ To see all the available options: invoke dev.test --help ``` +``` +{{ invoke_commands('dev.test --help') }} +``` + #### Database Permission Issues For local testing django creates a test database and removes it after testing. If you encounter permission issues while running unit test, ensure that your database user has permission to create new databases. diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md index 0fc3c7a930..d9b984e0e6 100644 --- a/docs/docs/part/create.md +++ b/docs/docs/part/create.md @@ -2,17 +2,20 @@ title: Creating a Part --- -## Part Creation Form +## Part Creation -New parts can be created from the *Part Category* view, by pressing the *New Part* button: +New parts can be created manually via the web interface, or imported from an external source. + +To create or import a part, navigate to the *Parts* view in the user interface, and select the *Add Parts* dropdown menu above the parts table: + +{{ image("part/new_parts_dropdown.png", "Add parts dropdown") }} !!! info "Permissions" - If the user does not have "create" permission for the *Part* permission group, the *New Part* button will not be available. + If the user does not have "create" permission for the *Part* permission group, the *Add Parts* menu will not be available. -{{ image("part/new_part.png", "New part") }} +## Create Part Form - -A part creation form is opened as shown below: +New parts can be created manually by selecting the *Create Part* option from the menu. A part creation form is opened as shown below: {{ image("part/part_create_form.png", "New part form") }} @@ -31,7 +34,6 @@ If this setting is enabled, the following elements are available in the form: Checking the *Create Initial Stock* form input then allows the creation of an initial quantity of stock for the new part. - ### Supplier Options If the part is marked as *Purchaseable*, the form provides some extra options to initialize the new part with manufacturer and / or supplier information: @@ -42,9 +44,44 @@ If the *Add Supplier Data* option is checked, then supplier part and manufacture {{ image("part/part_new_suppliers.png", "Part supplier information") }} +## Import from File + +Parts can be imported from an external file, by selecting the *Import from File* option. + +This action opens the [data import wizard](../settings/import.md), which steps the user through the process of importing parts from the selected file. + +## Import from Supplier + +InvenTree can integrate with external suppliers and import data from them, which helps to setup your system. Currently parts, supplier parts and manufacturer parts can be created automatically. + +!!! info "Plugin Required" + To import parts from a supplier, you must install a plugin which supports that supplier. + +### Requirements + +1. Install a supplier mixin plugin for you supplier +2. Goto "Admin Center > Plugins > [The supplier plugin]" and set the supplier company setting. Some plugins may require additional settings like API tokens. + +### Import a part + +New parts can be imported from the _Part Category_ view, by pressing the _Import Part_ button: + +{{ image("part/import_part.png", "Import part") }} + +Then just follow the wizard to confirm the category, select the parameters and create initial stock. + +{{ image("part/import_part_wizard.png", "Import part wizard") }} + +### Import a supplier part + +If you already have the part created, you can also just import the supplier part with it's corresponding manufacturer part. Open the supplier panel for the part and use the "Import supplier part" button: + +{{ image("part/import_supplier_part.png", "Import supplier part") }} + + ## Other Part Creation Methods -The following alternative methods for creating parts are supported: +In addition to the primary methods for creating or importing part data, the following methods are supported: - [Via the REST API](../api/index.md) - [Using the Python library](../api/python/index.md) diff --git a/docs/docs/plugins/mixins/supplier.md b/docs/docs/plugins/mixins/supplier.md new file mode 100644 index 0000000000..9c7071033f --- /dev/null +++ b/docs/docs/plugins/mixins/supplier.md @@ -0,0 +1,48 @@ +--- +title: Supplier Mixin +--- + +## SupplierMixin + +The `SupplierMixin` class enables plugins to integrate with external suppliers, enabling seamless creation of parts, supplier parts, and manufacturer parts with just a few clicks from the supplier. The import process is split into multiple phases: + +- Search supplier +- Select InvenTree category +- Match Part Parameters +- Create initial Stock + +### Import Methods + +A plugin can connect to multiple suppliers. The `get_suppliers` method should return a list of available supplier connections (e.g. using different credentials). +When a user initiates a search through the UI, the `get_search_results` function is called with the search term, supplier slug returned previously, and the search results are returned. These contain a `part_id` which is then passed to `get_import_data` along with the `supplier_slug`, if a user decides to import that specific part. This function should return a bunch of data that is needed for the import process. This data may be cached in the future for the same `part_id`. Then depending if the user only wants to import the supplier and manufacturer part or the whole part, the `import_part`, `import_manufacturer_part` and `import_supplier_part` methods are called automatically. If the user has imported the complete part, the `get_parameters` method is used to get a list of parameters which then can be match to inventree part parameter templates with some provided guidance. Additionally the `get_pricing_data` method is used to extract price breaks which are automatically considered when creating initial stock through the UI in the part import wizard. + +For that to work, a few methods need to be overridden: + +::: plugin.base.supplier.mixins.SupplierMixin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + summary: False + members: + - get_search_results + - get_import_data + - get_pricing_data + - get_parameters + - import_part + - import_manufacturer_part + - import_supplier_part + extra: + show_sources: True + +### Sample Plugin + +A simple example is provided in the InvenTree code base. Note that this uses some static data, but this can be extended in a real world plugin to e.g. call the supplier's API: + +::: plugin.samples.supplier.supplier_sample.SampleSupplierPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/report/helpers.md b/docs/docs/report/helpers.md index ec47feca8a..750c261182 100644 --- a/docs/docs/report/helpers.md +++ b/docs/docs/report/helpers.md @@ -263,7 +263,11 @@ Total Price: {% render_currency order.total_price currency='NZD' decimal_places= ## Maths Operations -Simple mathematical operators are available, as demonstrated in the example template below: +Simple mathematical operators are available, as demonstrated in the example template below. These operators can be used to perform basic arithmetic operations within the report template. + +### Input Types + +These mathematical functions accept inputs of various input types, and attempt to perform the operation accordingly. Note that any inputs which are provided as strings will be converted to floating point numbers before the operation is performed. ### add @@ -293,6 +297,13 @@ Simple mathematical operators are available, as demonstrated in the example temp show_docstring_description: false show_source: False +### modulo + +::: report.templatetags.report.modulo + options: + show_docstring_description: false + show_source: False + ### Example ```html diff --git a/docs/docs/start/backup.md b/docs/docs/start/backup.md index cb7f14399b..aee6193790 100644 --- a/docs/docs/start/backup.md +++ b/docs/docs/start/backup.md @@ -4,7 +4,7 @@ title: Data Backup ## Data Backup -Backup functionality is provided natively using the [django-dbbackup library](https://django-dbbackup.readthedocs.io/en/master/). This library provides multiple options for creating backups of your InvenTree database and media files. In addition to local storage backup, multiple external storage solutions are supported (such as Amazon S3 or Dropbox). +Backup functionality is provided natively using the [django-dbbackup library](https://archmonger.github.io/django-dbbackup/5.0.0/). This library provides multiple options for creating backups of your InvenTree database and media files. In addition to local storage backup, multiple external storage solutions are supported (such as Amazon S3 or Dropbox). Note that a *backup* operation is not the same as [migrating data](./migrate.md). While data *migration* exports data into a database-agnostic JSON file, *backup* exports a native database file and media file archive. @@ -13,19 +13,38 @@ Note that a *backup* operation is not the same as [migrating data](./migrate.md) ## Configuration +The django-dbbackup library provides [multiple configuration options](https://archmonger.github.io/django-dbbackup/5.0.0/configuration/), a subset of which are exposed via InvenTree. + The following configuration options are available for backup: | Environment Variable | Configuration File | Description | Default | | --- | --- | --- | --- | -| INVENTREE_BACKUP_STORAGE | backup_storage | Backup storage backend | django.core.files.storage.FileSystemStorage | -| INVENTREE_BACKUP_DIR | backup_dir | Backup storage directory | *No default* | -| INVENTREE_BACKUP_OPTIONS | backup_options | Specific backup options (dict) | *No default* | +| INVENTREE_BACKUP_STORAGE | backup_storage | Backup storage backend. Refer to the [storage backend documentation](#storage-backend). | django.core.files.storage.FileSystemStorage | +| INVENTREE_BACKUP_DIR | backup_dir | Backup storage directory. | *No default* | +| INVENTREE_BACKUP_OPTIONS | backup_options | Specific options for the selected storage backend (dict) | *No default* | +| INVENTREE_BACKUP_CONNECTOR_OPTIONS | backup_connector_options | Specific options for the database connector (dict). Refer to the [database connector options](#database-connector). | *No default* | +| INVENTREE_BACKUP_SEND_EMAIL | backup_send_email | If True, an email is sent to the site admin when an error occurs during a backup or restore procedure. | False | +| INVENTREE_BACKUP_EMAIL_PREFIX | backup_email_prefix | Prefix for the subject line of backup-related emails. | `[InvenTree Backup]` | +| INVENTREE_BACKUP_GPG_RECIPIENT | backup_gpg_recipient | Specify GPG recipient if using encryption for backups. | *No default* | +| INVENTREE_BACKUP_DATE_FORMAT | backup_date_format | Date format string used to format timestamps in backup filenames. | `%Y-%m-%d-%H%M%S` | +| INVENTREE_BACKUP_DATABASE_FILENAME_TEMPLATE | backup_database_filename_template | Template string used to generate database backup filenames. | `InvenTree-db-{datetime}.{extension}` | +| INVENTREE_BACKUP_MEDIA_FILENAME_TEMPLATE | backup_media_filename_template | Template string used to generate media backup filenames. | `InvenTree-media-{datetime}.{extension}` | -### Storage Providers +### Storage Backend -If you want to use an external storage provider, extra configuration is required. As a starting point, refer to the [django-dbbackup documentation](https://django-dbbackup.readthedocs.io/en/master/storage.html). +There are multiple backends available for storing and retrieving backup files. The default option is to use the local filesystem. Integration of other storage backends is provided by the django-storages library (which needs to be installed separately). -Specific storage configuration options are specified using the `backup_options` dict (in the [configuration file](./config.md#backup-file-storage)). +If you want to use an external storage provider, extra configuration is required. As a starting point, refer to the [django-dbbackup documentation](https://archmonger.github.io/django-dbbackup/5.0.0/storage/). + +Each storage backend may have its own specific configuration options and package requirements. Specific storage configuration options are specified using the `backup_options` dict (in the [configuration file](./config.md#backup-file-storage)), and passed through to the storage backend. + +### Database Connector + +Different database connection options are available, depending on the database backend in use. + +These options can be passed through via the `INVENTREE_BACKUP_CONNECTOR_OPTIONS` environment variable, or via the `backup_connector_options` value in the configuration file. + +Refer to the [database connector documentation](https://archmonger.github.io/django-dbbackup/5.0.0/databases/) for more information on the available options. ## Perform Backup @@ -43,6 +62,10 @@ This will perform backup operation with the default parameters. To see all avail invoke backup --help ``` +``` +{{ invoke_commands('backup --help') }} +``` + ### Backup During Update When performing an update of your InvenTree installation - via either [docker](./docker.md) or [bare metal](./install.md) - a backup operation is automatically performed. @@ -71,9 +94,72 @@ To see all available options for restore, run: invoke restore --help ``` +``` +{{ invoke_commands('restore --help') }} +``` + +## View Backups + +To view a list of available backups, run the following command from the shell: + +``` +invoke listbackups +``` + +## Backup Filename Formatting + +There are multiple configuration options available to control the formatting of backup filenames. These options are described in the [configuration section](#configuration) above. + +For more information about the available formatting options, refer to the [django-dbbackup documentation](https://archmonger.github.io/django-dbbackup/latest/configuration/#dbbackup_filename_template). + ## Advanced Usage -Not all functionality of the db-backup library is exposed by default. For advanced usage (not covered by the documentation above), refer to the [django-dbbackup commands documentation](https://django-dbbackup.readthedocs.io/en/master/commands.html). +Not all functionality of the db-backup library is exposed by default. For advanced usage (not covered by the documentation above), refer to the [django-dbbackup commands documentation](https://archmonger.github.io/django-dbbackup/5.0.0/commands/). !!! warning "Advanced Users Only" Any advanced usage assumes some underlying knowledge of django, and is not documented here. + +## Example: Google Cloud Storage + +By default, InvenTree backups are stored on the local filesystem. However, it is possible to configure remote storage backends, such as Google Cloud Storage (GCS). Below is a *brief* example of how you might configure GCS for backup storage. However, please note that this is for informational purposes only - the InvenTree project does not provide direct support for third-party storage backends. + +### External Documentation + +As a starting point, refer to the external documentation for django-dbbackup: https://archmonger.github.io/django-dbbackup/latest/storage/#google-cloud-storage + +### Install Dependencies + +You will need to install an additional package to enable GCS support: + +```bash +pip install django-storages[google] +``` + +!!! tip "Python Environment" + Ensure you install the package into the same Python environment that InvenTree is installed in (e.g. virtual environment). + +### Select Storage Backend + +You will need to change the storage backend, which is set via the `INVENTREE_BACKUP_STORAGE` environment variable, or via `backup_storage` in the configuration file: + +```yaml +backup_stoage: storages.backends.gcloud.GoogleCloudStorage +``` + +### Configure Backend Options + +You will need to also specify the required options for the GCS backend. This is done via the `INVENTREE_BACKUP_OPTIONS` environment variable, or via `backup_options` in the configuration file. An example configuration might look like: + +```yaml +backup_options: + bucket_name: 'your_bucket_name' + project_id: 'your_project_id' +``` + +### Advanced Configuration + +There are other options available for the GCS storage backend - refer to the [GCS documentation](https://django-storages.readthedocs.io/en/latest/backends/gcloud.html) for more information. + +### Other Backends + +Other storage backends are also supported via the django-storages library, such as Amazon S3, Dropbox, and more. This is outside the scope of this documentation - refer to the external documentation links on this page for more information. diff --git a/docs/docs/start/invoke.md b/docs/docs/start/invoke.md index 0ec4221724..6c7c9d02da 100644 --- a/docs/docs/start/invoke.md +++ b/docs/docs/start/invoke.md @@ -95,6 +95,10 @@ For example, to find more information about the `update` task, run: invoke update --help ``` +``` +{{ invoke_commands('update --help') }} +``` + ### Internal Tasks Tasks with the `int.` prefix are internal tasks, and are not intended for general use. These are called by other tasks, and should generally not be called directly. diff --git a/docs/docs/start/migrate.md b/docs/docs/start/migrate.md index 3f30ab8762..8cc760ffdb 100644 --- a/docs/docs/start/migrate.md +++ b/docs/docs/start/migrate.md @@ -31,6 +31,10 @@ This will create JSON file at the specified location which contains all database !!! info "Specifying filename" The filename of the exported file can be specified using the `-f` option. To see all available options, run `invoke export-records --help` +``` +{{ invoke_commands('export-records --help') }} +``` + ### Initialize New Database Configure the new database using the normal processes (see [Configuration](./config.md)) diff --git a/docs/main.py b/docs/main.py index 48b11d06ed..138e22f010 100644 --- a/docs/main.py +++ b/docs/main.py @@ -233,12 +233,12 @@ def define_env(env): return url @env.macro - def invoke_commands(): + def invoke_commands(command: str = '--list'): """Provides an output of the available commands.""" tasks = here.parent.joinpath('tasks.py') output = gen_base.joinpath('invoke-commands.txt') - command = f'invoke -f {tasks} --list > {output}' + command = f'invoke -f {tasks} {command} > {output}' assert subprocess.call(command, shell=True) == 0 diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 2639207c87..29e7c93da6 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -125,7 +125,7 @@ nav: - Project Security: security.md - Resources: project/resources.md - Privacy: privacy.md - - Install: + - Setup: - Introduction: start/index.md - Processes: start/processes.md - Configuration: start/config.md @@ -237,6 +237,7 @@ nav: - Report Mixin: plugins/mixins/report.md - Schedule Mixin: plugins/mixins/schedule.md - Settings Mixin: plugins/mixins/settings.md + - Supplier Mixin: plugins/mixins/supplier.md - Transition Mixin: plugins/mixins/transition.md - URL Mixin: plugins/mixins/urls.md - User Interface Mixin: plugins/mixins/ui.md diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index 5f3eca035f..67309e5e10 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -1,5 +1,6 @@ """Main JSON interface views.""" +import collections import json from pathlib import Path @@ -488,16 +489,46 @@ class BulkCreateMixin: if isinstance(data, list): created_items = [] + errors = [] + has_errors = False # If data is a list, we assume it is a bulk create request if len(data) == 0: raise ValidationError({'non_field_errors': _('No data provided')}) - for item in data: - serializer = self.get_serializer(data=item) - serializer.is_valid(raise_exception=True) - self.perform_create(serializer) - created_items.append(serializer.data) + # validate unique together fields + if unique_create_fields := getattr(self, 'unique_create_fields', None): + existing = collections.defaultdict(list) + for idx, item in enumerate(data): + key = tuple(item[v] for v in unique_create_fields) + existing[key].append(idx) + + unique_errors = [[] for _ in range(len(data))] + has_unique_errors = False + for item in existing.values(): + if len(item) > 1: + has_unique_errors = True + error = {} + for field_name in unique_create_fields: + error[field_name] = [_('This field must be unique.')] + for idx in item: + unique_errors[idx] = error + if has_unique_errors: + raise ValidationError(unique_errors) + + with transaction.atomic(): + for item in data: + serializer = self.get_serializer(data=item) + if serializer.is_valid(): + self.perform_create(serializer) + created_items.append(serializer.data) + errors.append([]) + else: + errors.append(serializer.errors) + has_errors = True + + if has_errors: + raise ValidationError(errors) return Response(created_items, status=201) diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index ef1ad9482a..1fed551bdf 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,12 +1,16 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 409 +INVENTREE_API_VERSION = 410 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v410 -> 2025-06-12 : https://github.com/inventree/InvenTree/pull/9761 + - Add supplier search and import API endpoints + - Add part parameter bulk create API endpoint + v409 -> 2025-10-17 : https://github.com/inventree/InvenTree/pull/10601 - Adds ability to filter StockList API by manufacturer part ID diff --git a/src/backend/InvenTree/InvenTree/backup.py b/src/backend/InvenTree/InvenTree/backup.py new file mode 100644 index 0000000000..709d545639 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/backup.py @@ -0,0 +1,133 @@ +"""Configuration options for InvenTree backup / restore functionality. + +We use the django-dbbackup library to handle backup and restore operations. + +Ref: https://archmonger.github.io/django-dbbackup/latest/configuration/ +""" + +import InvenTree.config + + +def get_backup_connector_options() -> dict: + """Options which are specific to the selected backup connector. + + These options apply to the database connector, not to the backup storage. + + Ref: https://archmonger.github.io/django-dbbackup/latest/databases/ + """ + default_options = {'EXCLUDE': ['django_session']} + + # Allow user to specify custom options here if necessary + connector_options = InvenTree.config.get_setting( + 'INVENTREE_BACKUP_CONNECTOR_OPTIONS', + 'backup_connector_options', + default_value=default_options, + typecast=dict, + ) + + return connector_options + + +def get_backup_storage_backend() -> str: + """Return the backup storage backend string.""" + backend = InvenTree.config.get_setting( + 'INVENTREE_BACKUP_STORAGE', + 'backup_storage', + 'django.core.files.storage.FileSystemStorage', + ) + + # Validate that the selected backend is valid + # It must be able to be imported, and a class must be found + # It also must be a subclass of django.core.files.storage.Storage + try: + from django.core.files.storage import Storage + from django.utils.module_loading import import_string + + backend_class = import_string(backend) + + if not issubclass(backend_class, Storage): + raise TypeError( + f"Backup storage backend '{backend}' is not a valid Storage class" + ) + except Exception as e: + raise ImportError(f"Could not load backup storage backend '{backend}': {e}") + + return backend + + +def get_backup_storage_options() -> dict: + """Return the backup storage options dictionary.""" + # Default backend options which are used for FileSystemStorage + default_options = {'location': InvenTree.config.get_backup_dir()} + + options = InvenTree.config.get_setting( + 'INVENTREE_BACKUP_OPTIONS', + 'backup_options', + default_value=default_options, + typecast=dict, + ) + + if not isinstance(options, dict): + raise ValueError('Backup storage options must be a dictionary') + + return options + + +def backup_email_on_error() -> bool: + """Return whether to send emails to admins on backup failure.""" + return InvenTree.config.get_setting( + 'INVENTREE_BACKUP_SEND_EMAIL', + 'backup_send_email', + default_value=False, + typecast=bool, + ) + + +def backup_email_prefix() -> str: + """Return the email subject prefix for backup emails.""" + return InvenTree.config.get_setting( + 'INVENTREE_BACKUP_EMAIL_PREFIX', + 'backup_email_prefix', + default_value='[InvenTree Backup]', + typecast=str, + ) + + +def backup_gpg_recipient() -> str: + """Return the GPG recipient for encrypted backups.""" + return InvenTree.config.get_setting( + 'INVENTREE_BACKUP_GPG_RECIPIENT', + 'backup_gpg_recipient', + default_value='', + typecast=str, + ) + + +def backup_date_format() -> str: + """Return the date format string for database backups.""" + return InvenTree.config.get_setting( + 'INVENTREE_BACKUP_DATE_FORMAT', + 'backup_date_format', + default_value='%Y-%m-%d-%H%M%S', + typecast=str, + ) + + +def backup_filename_template() -> str: + """Return the filename template for database backups.""" + return InvenTree.config.get_setting( + 'INVENTREE_BACKUP_DATABASE_FILENAME_TEMPLATE', + 'backup_database_filename_template', + default_value='InvenTree-db-{datetime}.{extension}', + typecast=str, + ) + + +def backup_media_filename_template() -> str: + """Return the filename template for media backups.""" + return InvenTree.config.get_setting( + 'INVENTREE_BACKUP_MEDIA_FILENAME_TEMPLATE', + 'backup_media_filename_template', + default_value='InvenTree-media-{datetime}.{extension}', + typecast=str, + ) diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index a8ce065b04..19e191b5d5 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -24,6 +24,7 @@ from django.http import Http404, HttpResponseGone import structlog from corsheaders.defaults import default_headers as default_cors_headers +import InvenTree.backup from InvenTree.cache import get_cache_config, is_global_cache_enabled from InvenTree.config import ( get_boolean_setting, @@ -247,22 +248,32 @@ if DEBUG and 'collectstatic' not in sys.argv: STATICFILES_DIRS.append(BASE_DIR.joinpath('plugin', 'samples', 'static')) # Database backup options -# Ref: https://django-dbbackup.readthedocs.io/en/master/configuration.html -DBBACKUP_SEND_EMAIL = False -DBBACKUP_STORAGE = get_setting( - 'INVENTREE_BACKUP_STORAGE', - 'backup_storage', - 'django.core.files.storage.FileSystemStorage', -) +# Ref: https://archmonger.github.io/django-dbbackup/latest/configuration/ -# Default backup configuration -DBBACKUP_STORAGE_OPTIONS = get_setting( - 'INVENTREE_BACKUP_OPTIONS', - 'backup_options', - default_value={'location': config.get_backup_dir()}, - typecast=dict, -) +# For core backup functionality, refer to the STORAGES["dbbackup"] entry (below) +DBBACKUP_DATE_FORMAT = InvenTree.backup.backup_date_format() +DBBACKUP_FILENAME_TEMPLATE = InvenTree.backup.backup_filename_template() +DBBACKUP_MEDIA_FILENAME_TEMPLATE = InvenTree.backup.backup_media_filename_template() + +DBBACKUP_GPG_RECIPIENT = InvenTree.backup.backup_gpg_recipient() + +DBBACKUP_SEND_EMAIL = InvenTree.backup.backup_email_on_error() +DBBACKUP_EMAIL_SUBJECT_PREFIX = InvenTree.backup.backup_email_prefix() + +DBBACKUP_CONNECTORS = {'default': InvenTree.backup.get_backup_connector_options()} + +# Data storage options +STORAGES = { + 'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, + 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}, + 'dbbackup': { + 'BACKEND': InvenTree.backup.get_backup_storage_backend(), + 'OPTIONS': InvenTree.backup.get_backup_storage_options(), + }, +} + +# Enable django admin interface? INVENTREE_ADMIN_ENABLED = get_boolean_setting( 'INVENTREE_ADMIN_ENABLED', config_key='admin_enabled', default_value=True ) diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 60cabc458c..9e1d634458 100644 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "نقطة نهاية API غير موجودة" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index fbfebe83d4..66fc810014 100644 --- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Трябва да активирате двойно оторизиране преди да направите, каквото и да е." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Не е намерена крайна точка на API" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Елементите трябва да се предоставят, като списък" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Филтрите следва да се предоставят, като dict" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Потребителя няма нужното разрешение, за да вижда този модел" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Цялостна наличност" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index 0ab65c8c3d..91e07b0d7f 100644 --- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Před tím, než budete dělat cokoli jiného, musíte zapnout dvoufaktorové ověřování." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API endpoint nebyl nalezen" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Seznam položek nebo filtrů musí být k dispozici pro hromadnou operaci" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Položky musí být uvedeny jako seznam" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Zadán neplatný seznam položek" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Filtry musí být uvedeny jako slovník" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Poskytnuty neplatné filtry" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Všechny filtry musí být použity s Pravda" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Zadaným kritériím neodpovídají žádné položky" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Nebyla poskytnuta žádná data" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Uživatel nemá právo zobrazit tento model" @@ -486,7 +490,7 @@ msgstr "Musí být platné číslo" msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Nadřazená sestava" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Zahrnout varianty" @@ -544,11 +548,11 @@ msgstr "Zahrnout varianty" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Zahrnout varianty" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Zahrnout varianty" msgid "Part" msgstr "Díl" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategorie" @@ -634,7 +638,7 @@ msgstr "Min. datum" msgid "Max Date" msgstr "Max datum" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Vyloučit strom" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Volitelné" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Sestava" @@ -694,7 +698,7 @@ msgstr "Výrobní příkaz" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Výstup neodpovídá výrobnímu příkazu" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" @@ -1036,7 +1040,7 @@ msgstr "Přidělené množství přesahuje dostupné množství na skladě" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Skladové položky" @@ -1122,8 +1126,8 @@ msgstr "Automaticky zvolit sériová čísla" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automaticky přidělit požadované položky s odpovídajícími sériovými čísly" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Následující sériová čísla již existují nebo jsou neplatná" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Povolit varianty" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Položka kusovníku" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Na objednávku" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "Naplánováno na sestavení" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Externí zásoby" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Dostupné zásoby" @@ -1470,19 +1474,19 @@ msgstr "Opožděný výrobní příkaz" msgid "Build order {bo} is now overdue" msgstr "Objednávka sestavy {bo} je nyní opožděná" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Je odkaz" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Je soubor" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "Uživatel nemá oprávnění k odstranění těchto příloh" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Uživatel nemá oprávnění k odstranění této přílohy" @@ -1599,7 +1603,7 @@ msgstr "Název tohoto webhooku" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktivní" @@ -2665,8 +2669,8 @@ msgstr "Díly jsou ve výchozím nastavení šablony" msgid "Parts can be assembled from other components by default" msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponent" @@ -2682,7 +2686,7 @@ msgstr "Možné zakoupit" msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Prodejné" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Dodavatel je aktivní" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Výrobce" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Společnost" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Odkaz na informace o adrese (externí)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Výrobce dílu" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Vyberte výrobce" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "MPN" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dodavatel" @@ -4028,7 +4032,7 @@ msgstr "Dodavatel" msgid "Select supplier" msgstr "Vyberte dodavatele" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Skladová evidence dodavatele" @@ -4120,7 +4124,7 @@ msgstr "Výchozí měna používaná pro tohoto dodavatele" msgid "Company Name" msgstr "Jméno společnosti" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Skladem" @@ -4276,7 +4280,7 @@ msgstr "Původní data řádku" msgid "Errors" msgstr "Chyby" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Platné" @@ -5153,11 +5157,11 @@ msgstr "Sloučit položky" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sloučit položky se stejným dílem, místem určení a cílovým datem do jedné řádkové položky" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Interní číslo dílu" @@ -5417,43 +5421,43 @@ msgstr "Vyloučit podkategorie v zadané kategorii" msgid "Has Results" msgstr "Má výsledky" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "Je varianta" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "Je revizí" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "Má revize" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "Kusovník schválen" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "Kaskádové kategorie" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "Pokud je pravda, zahrne položky z podkategorií dané kategorie" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrovat podle numerického ID kategorie nebo doslovného 'null'" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "Sestavený díl je testovatelný" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Díl komponenty je testovatelný" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Využití" @@ -5615,7 +5619,7 @@ msgstr "Klíčová slova dílu pro zlepšení vyhledávání" msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interní číslo dílu (IPN)" @@ -5656,7 +5660,7 @@ msgstr "Výchozí expirace" msgid "Expiry time (in days) for stock items of this part" msgstr "Expirační čas (ve dnech) pro zásoby tohoto dílu" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimální zásoby na skladě" @@ -6264,295 +6268,295 @@ msgstr "Soubor není obrázek" msgid "Number of parts using this template" msgstr "Počet dílů používajících tuto šablonu" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Původní díl" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Vyberte původní díl, který má být duplikován" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kopírovat obrázek" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Kopírovat obrázek z původního dílu" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Kopírovat kusovník" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Kopírovat kusovník z původního dílu" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Kopírovat parametry" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Kopírovat data parametrů z původního dílu" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Kopírovat poznámky" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Kopírovat poznámky z původního dílu" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "Kopírovat testy" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "Kopírovat testovací šablony z původního dílu" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Počáteční skladové množství" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Zadejte počáteční skladové množství pro tuto část. Pokud je množství nulové, není přidáno žádné." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Počáteční skladové místo" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Zadejte počáteční skladové místo pro tento díl" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Vyberte dodavatele (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Vyberte výrobce (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Číslo dílu výrobce" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "Vybraná společnost není platný dodavatel" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "Vybraná společnost není platný výrobce" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Výrobce dílu se stejným MPN již existuje" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Dodavatelský díl s tímto SKU již existuje" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Název kategorie" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Budova" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "Množství tohoto dílu, které je v současné době ve výrobě" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Zbývající množství tohoto dílu, které má být postaveno" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Skladové položky" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "Revize" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Dodavatelé" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Celkem skladem" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Nezařazené zásoby" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Skladové varianty" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Duplikovat díl" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Kopírovat počáteční data z jiného dílu" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Počáteční zásoby" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Vytvořit díl s počátečním množstvím zásob" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Informace o dodavateli" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Přidat počáteční informace dodavatele pro tento díl" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Kopírovat parametry kategorie" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Stávající obrázek" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Název souboru existujícího obrázku dílu" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Obrázek neexistuje" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Schválit celý kusovník" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Lze postavit" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "Vyžadováno pro výrobní objednávku" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "Přířazeno výrobním objednávkám" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "Vyžadováno pro prodejní objednávky" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "Přiřazeno prodejním objednávkám" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Minimální cena" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Přespat vypočítanou hodnotu pro minimální cenu" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Měna minimální ceny" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Maximální cena" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Přespat vypočítanou hodnotu pro maximální cenu" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Měna maximální ceny" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Aktualizovat" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nelze převést z poskytnutých měn na {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Minimální cena musí být vyšší než maximální cena" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Maximální cena nesmí být nížší než minimální cena" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "Vybrat nadřazenou sestavu" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "Vyberte komponentu dílu" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Vyberte díl pro kopírování kusovníku z" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Odstranit existující data" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Odstranit existující položky kusovníku před kopírováním" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Zahrnout zděděné" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Zahrnout položky kusovníku které jsou zdědené z šablonových dílů" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Přeskočit neplatné řádky" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Povolte tuto možnost pro přeskočení neplatných řádků" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Kopírovat náhradní díly" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku" @@ -6595,31 +6599,31 @@ msgstr "Expiruje dnes" msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dní" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "Vestavěný" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "Povinné" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "Příklad" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Nainstalováno" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "Plugin nemůže být odstraněn, protože je aktuálně aktivní" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Činnost nebyla specifikována" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Nebyla nalezena odpovídající činnost" @@ -7458,7 +7462,7 @@ msgstr "Balíčkový plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Nebyl nalezen žádný autor" @@ -8053,135 +8057,135 @@ msgstr "Nadřazená místo" msgid "Filter by parent location" msgstr "Filtrovat podle nadřazené lokace" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Název dílu (citlivost písmen na malá a velká písmena)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "Název dílu obsahuje (citlivost písmen na malá a velká písmena)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Název dílu (regex)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "IPN dílu (citlivost písmen na malá a velká písmena)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "IPN dílu obsahuje (citlivost písmen na malá a velká písmena)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "IPN dílu (regex)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Minimální zásoby" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Maximální zásoby" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Kód stavu" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Externí umístění" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Spotřebováno výrobním příkazem" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Nainstalováno v jiné skladové položce" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Strom dílů" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Aktualizováno před" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Aktualizováno po" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Inventura před" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Inventura po" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Datum expirace ped" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Datum expirace po" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Zastaralé" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Zadejte PK skladové položky, abyste vyloučili danou položku a všechny její potomky" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "Umístění kaskády" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "Pokud je pravda, uveďte předměty v podružených místech dané lokace" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Filtrovat podle numberické ID lokace nebo doslovného 'null'" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Množství je povinné" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Platný díl musí být dodán" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Daný dodavatelský díl neexistuje" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Dodavatelský díl na nastavenou velikost balení, ale znak use_pack_size není nastaven" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sériové čísla nemohou být zadána pro díl bez sledovanosti" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "Zahrnout nainstalované" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Pokud je pravda, zahrne výslekdy testů pro předměty nainstalované pod danou skladovou položku" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "Filtrovat podle číselného ID položky skladu" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Skladová položka s ID {id} neexistuje" @@ -8372,68 +8376,68 @@ msgstr "Převedeno na díl" msgid "Quantity exceeds available stock" msgstr "Množství přesahuje dostupné zásoby" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Díl není nastaven jako sledovatelný" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Množstvní musí být celé číslo" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Množství nesmí překročit dostupné množství zásob ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Sériové čísla musí být poskytnuta jako seznam" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Množství neodpovídá sériovým číslům" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "Testovací šablona neexistuje" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Skladová položka byla přidělena prodejní objednávce" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Skladová položka je nainstalována v jiné položce" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Skladová položka obsahuje jiné položky" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Skladová položka byla přidělena zákazníkovi" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Skladová položka je ve výrobě" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Serializované zásoby nelze sloučit" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Duplicitní skladové položky" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Skladové položky musí odkazovat na stejný díl" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Skladové položky musí odkazovat na stejný díl dodavatele" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Kódy stavu zásob se musí shodovat" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 584b169fe4..04b85970d3 100644 --- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API endpoint ikke fundet" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Bruger har ikke tilladelse til at se denne model" @@ -486,7 +490,7 @@ msgstr "Skal være et gyldigt tal" msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Overordnet produktion" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Valgfri" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "Produktionsordre" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index 95a643b800..632d44c258 100644 --- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Sie müssen die Zwei-Faktor-Authentifizierung aktivieren, bevor Sie etwas tun können." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Ungültige Artikelliste angegeben" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" -msgstr "" +msgstr "Filter müssen als Dict gegeben sein" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Ungültige Filter angegeben" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Alle Filter dürfen nur mit true verwendet werden" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" -msgstr "" +msgstr "Keine Gegenstände erfüllen die vorgegebenen Kriterien" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" +msgstr "Keine Daten verfügbar" + +#: InvenTree/api.py:513 +msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" @@ -486,7 +490,7 @@ msgstr "Muss eine gültige Nummer sein" msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" @@ -512,11 +516,11 @@ msgstr "Fehler beim Herunterladen des Bildes von entfernter URL" #: InvenTree/tasks.py:575 msgid "Update Available" -msgstr "" +msgstr "Update verfügbar" #: InvenTree/tasks.py:576 msgid "An update for InvenTree is available" -msgstr "" +msgstr "Ein Update für InvenTree ist verfügbar" #: InvenTree/validators.py:29 msgid "Invalid physical unit" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Eltern-Bauauftrag" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Varianten einschließen" @@ -544,11 +548,11 @@ msgstr "Varianten einschließen" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Varianten einschließen" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Varianten einschließen" msgid "Part" msgstr "Teil" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategorie" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Baum ausschließen" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Optional" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Baugruppe" @@ -674,7 +678,7 @@ msgstr "Zugeordnet" #: build/api.py:492 build/models.py:1672 build/serializers.py:1429 msgid "Consumed" -msgstr "" +msgstr "Verbraucht" #: build/api.py:501 company/models.py:930 company/serializers.py:451 #: templates/email/build_order_required_stock.html:19 @@ -694,7 +698,7 @@ msgstr "Bauauftrag" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Lagerartikel" @@ -1122,8 +1126,8 @@ msgstr "Seriennummern automatisch zuweisen" msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Varianten zulassen" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Stücklisten-Position" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Bestellt" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Externes Lager" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Verfügbarer Bestand" @@ -1470,19 +1474,19 @@ msgstr "Überfälliger Bauauftrag" msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Link" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Datei" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" @@ -1599,7 +1603,7 @@ msgstr "Name für diesen Webhook" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiv" @@ -1947,7 +1951,7 @@ msgstr "" #: common/models.py:2272 msgid "Default Entry" -msgstr "" +msgstr "Standardeintrag" #: common/models.py:2273 msgid "Default entry for this selection list" @@ -1999,7 +2003,7 @@ msgstr "" #: common/models.py:2373 msgid "Barcode Scan" -msgstr "" +msgstr "Barcodescan" #: common/models.py:2377 importer/models.py:546 part/models.py:4081 msgid "Data" @@ -2068,35 +2072,35 @@ msgstr "" #: common/models.py:2582 msgid "Announced" -msgstr "" +msgstr "Angekündigt" #: common/models.py:2584 msgid "Sent" -msgstr "" +msgstr "Gesendet" #: common/models.py:2585 msgid "Failed" -msgstr "" +msgstr "Fehlgeschlagen" #: common/models.py:2588 msgid "Delivered" -msgstr "" +msgstr "Zugestellt" #: common/models.py:2596 msgid "Confirmed" -msgstr "" +msgstr "Bestätigt" #: common/models.py:2602 msgid "Inbound" -msgstr "" +msgstr "Eingehend" #: common/models.py:2603 msgid "Outbound" -msgstr "" +msgstr "Ausgehend" #: common/models.py:2608 msgid "No Reply" -msgstr "" +msgstr "Keine Rückmeldung" #: common/models.py:2609 msgid "Track Delivery" @@ -2665,8 +2669,8 @@ msgstr "Teile sind standardmäßig Vorlagen" msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponente" @@ -2682,7 +2686,7 @@ msgstr "Kaufbar" msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Verkäuflich" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Lieferant ist aktiv" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Hersteller" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Firma" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Herstellerteil" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Hersteller auswählen" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "MPN" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Zulieferer" @@ -4028,7 +4032,7 @@ msgstr "Zulieferer" msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" @@ -4120,7 +4124,7 @@ msgstr "Standard-Währung für diesen Zulieferer" msgid "Company Name" msgstr "Firmenname" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Auf Lager" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "Fehler" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Gültig" @@ -5153,11 +5157,11 @@ msgstr "Elemente zusammenfügen" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Zusammenführen von Elementen mit dem gleichen Teil, Ziel- und Zieldatum zu einem Zeilenelement" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Interne Teilenummer" @@ -5417,43 +5421,43 @@ msgstr "Unterkategorien in der angegebenen Kategorie ausschließen" msgid "Has Results" msgstr "Ergebnisse" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Verwendet" @@ -5615,7 +5619,7 @@ msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Interne Produktnummer)" @@ -5656,7 +5660,7 @@ msgstr "Standard Ablaufzeit" msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimaler Bestand" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "Anzahl der Teile, die diese Vorlage verwenden" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:535 +#: part/serializers.py:536 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:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Kategoriename" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Im Bau" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagerartikel" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Zulieferer" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Gesamtbestand" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Herstellbar" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Konnte nicht von den angegebenen Währungen in {default_currency} umrechnen" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Installiert" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "Das Plugin kann nicht gelöscht werden, da es derzeit aktiv ist" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Keine Aktion angegeben" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Keine passende Aktion gefunden" @@ -7200,7 +7204,7 @@ msgstr "" #: plugin/builtin/integration/part_notifications.py:31 msgid "Send notifications" -msgstr "" +msgstr "Benachrichtigungen senden" #: plugin/builtin/integration/part_notifications.py:32 msgid "Send notifications for part changes to subscribed users" @@ -7458,7 +7462,7 @@ msgstr "Paket-Plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Kein Autor gefunden" @@ -7747,7 +7751,7 @@ msgstr "Vorlagen Name" #: report/models.py:223 msgid "Template description" -msgstr "" +msgstr "Beschreibung der Vorlage" #: report/models.py:229 msgid "Revision number (auto-increments)" @@ -8053,135 +8057,135 @@ msgstr "Übergeordneter Ort" msgid "Filter by parent location" msgstr "Filtern nach übergeordnetem Ort" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Statuscode" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Externer Standort" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Teile-Baum" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Gültigkeitsdauer vor" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "überfällig" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Gültiges Teil muss angegeben werden" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Der angegebene Lieferantenartikel existiert nicht" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Das Zulieferteil hat eine Packungsgröße definiert, aber das Kennzeichen use_pack_size ist nicht gesetzt" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "In Teil umgewandelt" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Menge darf die verfügbare Lagermenge ({self.quantity}) nicht überschreiten" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "Testvorlage existiert nicht" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" @@ -8782,11 +8786,11 @@ msgstr "" #: stock/serializers.py:1872 msgid "Next Serial Number" -msgstr "" +msgstr "Nächste Seriennummer" #: stock/serializers.py:1878 msgid "Previous Serial Number" -msgstr "" +msgstr "Vorherige Seriennummer" #: stock/status_codes.py:11 msgid "OK" @@ -9164,19 +9168,19 @@ msgstr "" #: users/models.py:496 msgid "Internal" -msgstr "" +msgstr "Intern" #: users/models.py:498 msgid "Guest" -msgstr "" +msgstr "Gast" #: users/models.py:507 msgid "Language" -msgstr "" +msgstr "Sprache" #: users/models.py:508 msgid "Preferred language for the user" -msgstr "" +msgstr "Bevorzugte Sprache für diesen Benutzer" #: users/models.py:513 msgid "Theme" @@ -9196,7 +9200,7 @@ msgstr "" #: users/models.py:528 msgid "Display Name" -msgstr "" +msgstr "Anzeigename" #: users/models.py:529 msgid "Chosen display name for the user" @@ -9236,7 +9240,7 @@ msgstr "" #: users/models.py:575 msgid "Organisation" -msgstr "" +msgstr "Organisation" #: users/models.py:576 msgid "Users primary organisation/affiliation" @@ -9316,7 +9320,7 @@ msgstr "" #: users/serializers.py:359 msgid "Password" -msgstr "" +msgstr "Passwort" #: users/serializers.py:360 msgid "Password for the user" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index ce1a62920c..5209cb2c18 100644 --- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Το API endpoint δε βρέθηκε" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" @@ -486,7 +490,7 @@ msgstr "Πρέπει να είναι αριθμός" msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Γονική Κατασκευή" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Προαιρετικό" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "Σειρά Κατασκευής" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Η έξοδος κατασκευής δεν ταιριάζει με τη #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" @@ -1122,8 +1126,8 @@ msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index 07d511a30e..75d8179041 100644 --- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-07 00:31+0000\n" +"POT-Creation-Date: 2025-10-17 20:31+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -22,43 +22,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "" @@ -487,7 +491,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -536,7 +540,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -545,11 +549,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -558,7 +562,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -569,9 +573,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -635,7 +639,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -652,8 +656,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -695,7 +699,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -946,8 +950,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1037,7 +1041,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1123,8 +1127,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1364,30 +1368,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1471,19 +1475,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1600,7 +1604,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2666,8 +2670,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2683,7 +2687,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3760,12 +3764,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3951,7 +3955,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3969,7 +3973,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4018,10 +4022,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4029,7 +4033,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4121,7 +4125,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4277,7 +4281,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5154,11 +5158,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5418,43 +5422,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5616,7 +5620,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5657,7 +5661,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6265,295 +6269,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6596,31 +6600,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7459,7 +7463,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8054,135 +8058,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8373,68 +8377,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 72de5b841b..c965dc4c7f 100644 --- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Debe habilitar la autenticación de doble factor antes de continuar." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "endpoint API no encontrado" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Lista de artículos o filtros deben ser proporcionados para la operación en bloque" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Los artículos deben ser proporcionados como una lista" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Lista de artículos no válida" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Los filtros deben ser introducidos como un diccionario" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Filtros proporcionados inválidos" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Todos los filtros tienen que ser usados con verdadero" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Ningún artículo coincide con el criterio proporcionado" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Sin datos proporcionados" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" @@ -486,7 +490,7 @@ msgstr "Debe ser un número válido" msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Construcción o Armado Superior" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Incluye Variantes" @@ -544,11 +548,11 @@ msgstr "Incluye Variantes" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Categoría" @@ -634,7 +638,7 @@ msgstr "Fecha Mínima" msgid "Max Date" msgstr "Fecha Máxima" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Excluir Árbol" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opcional" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Montaje" @@ -694,7 +698,7 @@ msgstr "Construir órden" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "La salida de la construcción no coincide con el orden de construcción" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Artículo de stock" @@ -1122,8 +1126,8 @@ msgstr "Autoasignar Números de Serie" msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Permitir variantes" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Item de Lista de Materiales" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "En pedido" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Stock Disponible" @@ -1470,19 +1474,19 @@ msgstr "Orden de construcción atrasada" msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1599,7 +1603,7 @@ msgstr "Nombre para este webhook" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Activo" @@ -2665,8 +2669,8 @@ msgstr "Las partes son plantillas por defecto" msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Componente" @@ -2682,7 +2686,7 @@ msgstr "Comprable" msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Vendible" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Fabricante" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Empresa" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Seleccionar fabricante" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Proveedor" @@ -4028,7 +4032,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4120,7 +4124,7 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "En Stock" @@ -4276,7 +4280,7 @@ msgstr "Datos de la fila original" msgid "Errors" msgstr "Errores" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Válido" @@ -5153,11 +5157,11 @@ msgstr "Combinar artículos" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "SKU" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Número de parte interna" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5656,7 +5660,7 @@ msgstr "Expiración por defecto" 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" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Stock mínimo" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Copiar Parámetros" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "En construcción" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Proveedores" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Instalado" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "No se especificó ninguna acción" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "No se encontró ninguna acción coincidente" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "No se encontró autor" @@ -8053,135 +8057,135 @@ msgstr "Ubicación principal" msgid "Filter by parent location" msgstr "Filtrar por ubicación principal" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "El nombre de la pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Nombre de la pieza (expresión regular)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "Pieza IPN (expresión regular)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Stock mínimo" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Stock máximo" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Código de estado" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Ubicación externa" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Instalado en otro artículo de existencias" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Árbol de piezas" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Actualizado antes" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Actualizado después" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Inventario antes" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Inventario después" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Desactualizado" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Cantidad requerida" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Debe suministrarse una parte válida" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Convertido a parte" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Artículo de stock ha sido asignado a un pedido de venta" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index 5acd35ed05..c34f40c4af 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Debe habilitar la autenticación de doble factor antes de hacer cualquier otra cosa." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "endpoint API no encontrado" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Lista de artículos o filtros deben ser proporcionados para la operación en bloque" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Los artículos deben ser provistos como una lista" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Lista de artículos inválida" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Los filtros deben ser provistos como un diccionario" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Filtros proporcionados inválidos" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Todos los filtros sólo deben ser usados como verdaderos" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Ningún artículo coincide con el criterio proporcionado" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" @@ -486,7 +490,7 @@ msgstr "Debe ser un número válido" msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Construcción o Armado Superior" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Incluye Variantes" @@ -544,11 +548,11 @@ msgstr "Incluye Variantes" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Categoría" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opcional" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Montaje" @@ -694,7 +698,7 @@ msgstr "Construir órden" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "La salida de la construcción no coincide con el orden de construcción" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Artículo de stock" @@ -1122,8 +1126,8 @@ msgstr "Autoasignar Números de Serie" msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Permitir variantes" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Item de Lista de Materiales" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "En pedido" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Stock Disponible" @@ -1470,19 +1474,19 @@ msgstr "Orden de construcción atrasada" msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1599,7 +1603,7 @@ msgstr "Nombre para este webhook" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Activo" @@ -2665,8 +2669,8 @@ msgstr "Las partes son plantillas por defecto" msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Componente" @@ -2682,7 +2686,7 @@ msgstr "Comprable" msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Vendible" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Fabricante" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Empresa" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Seleccionar fabricante" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Proveedor" @@ -4028,7 +4032,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4120,7 +4124,7 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "En Stock" @@ -4276,7 +4280,7 @@ msgstr "Datos de la fila original" msgid "Errors" msgstr "Errores" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Válido" @@ -5153,11 +5157,11 @@ msgstr "Combinar artículos" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "SKU" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Número de parte interna" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5656,7 +5660,7 @@ msgstr "Expiración por defecto" 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" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Stock mínimo" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Copiar Parámetros" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "En construcción" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Proveedores" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Instalado" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "No se especificó ninguna acción" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "No se encontró ninguna acción coincidente" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "No se encontró autor" @@ -8053,135 +8057,135 @@ msgstr "Ubicación principal" msgid "Filter by parent location" msgstr "Filtrar por ubicación principal" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "El nombre de la pieza contiene (insensible a mayúsculas y minúsculas)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Nombre de la pieza (expresión regular)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "IPN de Pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "IPN de pieza contiene (insensible a mayúsculas y minúsculas)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "IPN de Pieza (expresión regular)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Existencias mínimas" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Existencias máximas" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Código de estado" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Ubicación externa" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Consumido por orden de construcción" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Instalado en otro artículo de existencias" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Árbol de piezas" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Actualizado antes de" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Actualizado después de" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Inventario antes de" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Inventario después de" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Desactualizado" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Cantidad requerida" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Debe suministrarse una parte válida" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Convertido a parte" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Artículo de stock ha sido asignado a un pedido de venta" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index ead361094b..e7d9ae9700 100644 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Teil ei ole selle lehe vaatamiseks luba" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "Valuuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Valikuline" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Saadaval laos" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "On link" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "On fail" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponent" @@ -2682,7 +2686,7 @@ msgstr "Ostetav" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Tootja" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Ettevõte" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tarnija" @@ -4028,7 +4032,7 @@ msgstr "Tarnija" msgid "Select supplier" msgstr "Vali tarnija" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "Osa kategooria" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimaalne laoseis" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Originaalosa" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kopeeri pilt" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Kopeeri parameetrid" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Kategooria nimi" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Ehitamine" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Tarnijad" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Tarnija info" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Minimaalne hind" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Maksimaalne hind" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Uuenda" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Paigaldatud" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "Paki plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Autorit ei leitud" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index e3f26b2b9b..5468ee9cc2 100644 --- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "قبل از انجام هر کار دیگری باید احراز هویت دو مرحله ای را فعال کنید." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Address e API peida nashod" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "لیست اقلام یا فیلترها باید برای عملیات انبوه ارائه شود" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "موارد باید به صورت لیست ارائه شود" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "لیست موارد نامعتبر ارائه شده است" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "فیلترها باید به صورت دستوری ارائه شوند" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "فیلترهای نامعتبر ارائه شده است" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "تمامی فیلترها باید منحصراً با مقدار true مورد استفاده قرار گیرند" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "هیچ موردی با معیارهای ارائه شده مطابقت ندارد" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد" @@ -486,7 +490,7 @@ msgstr "باید یک عدد معتبر باشد" msgid "Currency" msgstr "ارز" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "ارز را از گزینه های موجود انتخاب کنید" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "دسته" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "اختیاری" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "مونتاژ" @@ -694,7 +698,7 @@ msgstr "سفارش ساخت" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "هیچ عملیات کاربر-محوری، مشخص نشده است" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index 5eb3146347..9bbe67dfc5 100644 --- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API-rajapintaa ei löydy" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen" @@ -486,7 +490,7 @@ msgstr "Täytyy olla kelvollinen luku" msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategoria" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Varastotuote" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiivinen" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponentti" @@ -2682,7 +2686,7 @@ msgstr "Ostettavissa" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Valmistaja" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Yritys" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Valitse valmistaja" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Toimittaja" @@ -4028,7 +4032,7 @@ msgstr "Toimittaja" msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 7f1d4755df..78a8834f85 100644 --- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Vous devez activer l'authentification à deux facteurs avant toute autre chose." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Liste des éléments ou des filtres à fournir pour les opérations en vrac" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Les éléments doivent être fournis sous forme de liste" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Liste d'éléments non valide fournie" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Les filtres doivent être fournis sous forme de dictionnaire" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Filtres fournis invalides" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Tous les filtres ne doivent être utilisés qu'avec \"true\"" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Aucun élément ne correspond aux critères fournis" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Aucune donnée disponible" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "L'utilisateur n'a pas la permission de voir ce modèle" @@ -486,7 +490,7 @@ msgstr "Doit être un nombre valide" msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Fabrication parente" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Inclure les variantes" @@ -544,11 +548,11 @@ msgstr "Inclure les variantes" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Inclure les variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Inclure les variantes" msgid "Part" msgstr "Pièce" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Catégorie" @@ -634,7 +638,7 @@ msgstr "Date min" msgid "Max Date" msgstr "Date maximale" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Exclure l'arbre" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Facultatif" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Assemblage" @@ -694,7 +698,7 @@ msgstr "Ordre de Fabrication" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "L'ordre de production de correspond pas à l'ordre de commande" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" @@ -1036,7 +1040,7 @@ msgstr "La quantité allouée dépasse la quantité disponible dans le stock" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Article en stock" @@ -1122,8 +1126,8 @@ msgstr "Allouer automatiquement les numéros de série" 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:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Autoriser les variantes" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Article du BOM" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "En Commande" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "Planifié pour fabrication" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Stock externe" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Stock disponible" @@ -1470,19 +1474,19 @@ msgstr "Ordre de commande en retard" msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "C'est un lien" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "C'est un fichier" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" @@ -1599,7 +1603,7 @@ msgstr "Nom de ce webhook" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Actif" @@ -2665,8 +2669,8 @@ msgstr "Les pièces sont des templates par défaut" msgid "Parts can be assembled from other components by default" msgstr "Les pièces peuvent être assemblées à partir d'autres composants par défaut" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Composant" @@ -2682,7 +2686,7 @@ msgstr "Achetable" msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Vendable" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Le fournisseur est actif" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Fabricant" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Société" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Lien vers les informations de l'adresse (externe)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Pièces du fabricant" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Sélectionner un fabricant" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "Référence fabricant" @@ -4017,10 +4021,10 @@ 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:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fournisseur" @@ -4028,7 +4032,7 @@ msgstr "Fournisseur" msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" @@ -4120,7 +4124,7 @@ msgstr "Devise par défaut utilisée pour ce fournisseur" msgid "Company Name" msgstr "Nom de l'entreprise" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "En Stock" @@ -4276,7 +4280,7 @@ msgstr "Données de la ligne d'origine" msgid "Errors" msgstr "Erreurs" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Valide" @@ -5153,11 +5157,11 @@ msgstr "Fusionner des éléments" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Fusionner en un seul poste les éléments ayant la même partie, la même destination et la même date cible" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Numéro de pièce interne" @@ -5417,43 +5421,43 @@ msgstr "Exclure les sous-catégories de la catégorie spécifiée" msgid "Has Results" msgstr "A des résultats" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "Est variante" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "Est la révision" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "A des révisions" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "Nomenclature valide" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "La pièce d'assemblage est testable" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Le composant est testable" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Utilise" @@ -5615,7 +5619,7 @@ msgstr "Les mots-clés partiels pour améliorer la visibilité dans les résulta msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5656,7 +5660,7 @@ msgstr "Expiration par défaut" msgid "Expiry time (in days) for stock items of this part" msgstr "Délai d'expiration (en jours) pour les articles en stock de cette pièce" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Stock Minimum" @@ -6264,295 +6268,295 @@ msgstr "Le fichier n'est pas une image" msgid "Number of parts using this template" msgstr "Nombre de pièces utilisant ce modèle" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Partie originale" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Sélectionner la partie originale à dupliquer" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Copier l'image à partir de la partie originale" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Copier la nomenclature" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Copie de la nomenclature de la pièce originale" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Copier les paramètres" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Copie des données de paramètres de la pièce d'origine" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Notes sur la copie" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Copier les notes de la partie originale" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "Test Copie" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Quantité de stock initial" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Indiquer la quantité de stock initiale pour cette pièce. Si la quantité est égale à zéro, aucun stock n'est ajouté." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Emplacement initial du stock" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Spécifier l'emplacement du stock initial pour cette pièce" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Sélectionner le fournisseur (ou laisser en blanc pour passer)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Sélectionner le fabricant (ou laisser en blanc pour ignorer)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Numéro de pièce du fabricant" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "L'entreprise sélectionnée n'est pas un fournisseur valide" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "L'entreprise sélectionnée n'est pas un fabricant valide" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "La pièce du fabricant correspondant à ce MPN existe déjà" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "La pièce du fournisseur correspondant à cette UGS existe déjà" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Nom catégorie" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Construction" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "Quantité de cette pièce actuellement en production" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantité exceptionnelle de cette pièce sont planifié à la fabrication" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Éléments en stock" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "Révisions" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Fournisseurs" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Stock total" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Stock non attribué" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Variante Stock" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Dupliquer une pièce" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Copier les données initiales d'une autre partie" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Stock initial" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Créer une pièce avec une quantité de stock initiale" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Informations sur le fournisseur" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Ajouter les informations initiales du fournisseur pour cette pièce" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Copier les paramètres de la catégorie" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Copier les modèles de paramètres de la catégorie de pièces sélectionnée" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Image existante" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Nom de fichier d'une image de pièce existante" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Le fichier image n'existe pas" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Valider l'ensemble de la nomenclature" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Peut construire" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "Nécessaire pour fabrication" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "Alloué à la fabrication" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "Nécessaire pour les commandes" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "Alloué aux commandes" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Remplacer la valeur calculée pour le prix minimum" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Prix minimum monnaie" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Remplacer la valeur calculée pour le prix maximum" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Devise du prix maximum" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Mise à jour" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Mise à jour des prix pour cette pièce" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossible de convertir les devises fournies en {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Le prix minimum ne doit pas être supérieur au prix maximum" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Le prix maximum ne doit pas être inférieur au prix minimum" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "Sélectionner l'assemblage parent" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "Sélectionner le composant" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Sélectionner la pièce à partir de laquelle copier la nomenclature" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Supprimer les données existantes" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Supprimer les postes de nomenclature existants avant de les copier" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Inclure l'héritage" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclure les éléments de nomenclature hérités des pièces modélisées" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Sauter les lignes non valides" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Activez cette option pour ignorer les lignes non valides" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Copier les pièces de remplacement" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature" @@ -6595,31 +6599,31 @@ msgstr "Expire aujourd’hui" msgid "{days_until_expiry} days" msgstr "{days_until_expiry} jours" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "Intégré" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "Obligatoire" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "Échantillon" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Installé" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "Le plugin ne peut pas être supprimé car il est actuellement actif" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Aucune action spécifiée" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Aucune action correspondante trouvée" @@ -7458,7 +7462,7 @@ msgstr "Plugin Package" msgid "Plugin" msgstr "Extension" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Aucun auteur trouvé" @@ -8053,135 +8057,135 @@ msgstr "Emplacement parent" msgid "Filter by parent location" msgstr "Filtrer par emplacement parent" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Nom de la pièce (insensible à la casse)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "Le nom de la pièce contient (insensible à la casse)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Nom de la pièce (regex)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "Partie IPN (insensible à la casse)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "La partie IPN contient (insensible à la casse)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "Partie IPN (regex)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Stock minimum" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Stock maximum" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Code de statut" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Emplacement externe" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Consommé par l'ordre de construction" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Installé dans un autre article en stock" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Arbre en pièces détachées" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Mise à jour avant" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Mise à jour après" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Inventaire avant" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Inventaire après" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Date d'expiration avant" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Date d’expiration après" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Périmé" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "La quantité est requise" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "La partie valide doit être fournie" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Le fournisseur donné n'existe pas" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "La pièce du fournisseur a une taille d'emballage définie, mais le drapeau use_pack_size n'est pas activé" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Les numéros de série ne peuvent pas être fournis pour une pièce non traçable" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Converti en partie" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "La pièce n'est pas définie comme pouvant faire l'objet d'un suivi" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "La quantité doit être un nombre entier" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Les numéros de série doivent être fournis sous forme de liste" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "Le modèle de test n'existe pas" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Un article de stock a été affecté à une commande client" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "L'article de stock est installé dans un autre article" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "L'article de stock contient d'autres articles" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Un article de stock a été affecté à un client" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "L'article de stock est actuellement en production" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Le stock sérialisé ne peut pas être fusionné" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Articles de stock en double" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Les articles en stock doivent se référer à la même pièce" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Les articles en stock doivent se référer à la même pièce du fournisseur" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Les codes d'état des stocks doivent correspondre" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index 256a7da89e..3bccd560bd 100644 --- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "למשתמש אין הרשאה לצפות במוזל הזה" @@ -486,7 +490,7 @@ msgstr "המספר חייב להיות תקין" msgid "Currency" msgstr "מטבע" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "בחר מטבע מהאפשרויות הזמינות" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "מקור הבנייה" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "לא פורטה הפעולה" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "פעולה מבוקשת לא נמצאה" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index a881e00fa8..2d301b55dd 100644 --- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index 76edaffc98..f9ecb9d832 100644 --- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Mielőtt továbbmenne kötelező a kétfaktoros authentikációt engedélyeznie." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API funkciót nem találom" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Tömeges művelethez tételek vagy szűrők megadása kötelező" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "A tételeket listában kell átadni" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Érvénytelen a tétel lista" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "A szűrőket dict - szótár - formában kell megadni" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Érvénytelen szűrők vannak megadva" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Minden szűrő csak true értékkel használható" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Nincs a szűrésnek megfelelő tétel" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Nincs adat megadva" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Nincs jogosultságod az adatok megtekintéséhez" @@ -486,7 +490,7 @@ msgstr "Érvényes számnak kell lennie" msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Szülő gyártás" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Változatokkal együtt" @@ -544,11 +548,11 @@ msgstr "Változatokkal együtt" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Változatokkal együtt" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Változatokkal együtt" msgid "Part" msgstr "Alkatrész" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategória" @@ -634,7 +638,7 @@ msgstr "Ettől a dátumtól" msgid "Max Date" msgstr "Eddig a dátumig" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Fa kihagyása" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opcionális" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Gyártmány" @@ -694,7 +698,7 @@ msgstr "Gyártási utasítás" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Gyártási kimenet nem egyezik a gyártási utasítással" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" @@ -1036,7 +1040,7 @@ msgstr "Lefoglalt mennyiség meghaladja az elérhető készletet" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Készlet tétel" @@ -1122,8 +1126,8 @@ msgstr "Sorozatszámok automatikus hozzárendelése" 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:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" @@ -1364,30 +1368,30 @@ msgid "Allow Variants" msgstr "Változatok" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Rendelve" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "Gyártás Ütemezve" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Külső raktárkészlet" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Elérhető készlet" @@ -1471,19 +1475,19 @@ msgstr "Késésben lévő gyártás" msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Ez egy hivatkozás" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Ez egy állomány" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "A felhasználó nem jogosult ezen mellékletek törlésére" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "A felhasználó nem jogosult ezen melléklet törlésére" @@ -1600,7 +1604,7 @@ msgstr "Webhook neve" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktív" @@ -2666,8 +2670,8 @@ msgstr "Alkatrészek alapból sablon alkatrészek legyenek" msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Összetevő" @@ -2683,7 +2687,7 @@ msgstr "Beszerezhető" msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Értékesíthető" @@ -3760,12 +3764,12 @@ msgid "Supplier is Active" msgstr "A Beszállító Aktív" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Gyártó" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Cég" @@ -3951,7 +3955,7 @@ msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" @@ -3969,7 +3973,7 @@ msgid "Select manufacturer" msgstr "Gyártó kiválasztása" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "MPN (Gyártói cikkszám)" @@ -4018,10 +4022,10 @@ 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:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Beszállító" @@ -4029,7 +4033,7 @@ msgstr "Beszállító" msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" @@ -4121,7 +4125,7 @@ msgstr "Beszállító által használt alapértelmezett pénznem" msgid "Company Name" msgstr "Cégnév" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Készleten" @@ -4277,7 +4281,7 @@ msgstr "Eredeti sor adat" msgid "Errors" msgstr "Hibák" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Érvényes" @@ -5154,11 +5158,11 @@ msgstr "Elemek összevonása" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Azonos forrás és cél dátumú Alkatrész tételeinek összevonása egy tételre" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Belső cikkszám" @@ -5418,43 +5422,43 @@ msgstr "Az adott kategória alkategóriáinak kihagyása" msgid "Has Results" msgstr "Van találat" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "Változat-e" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "Változat" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "Vannak Változatok" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "Összeállított Alkatrész ellenőrizhető" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Összetevő alkatrész ellenőrizhető" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Használ" @@ -5616,7 +5620,7 @@ msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredmén msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Belső Cikkszám)" @@ -5657,7 +5661,7 @@ msgstr "Alapértelmezett lejárat" 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:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimális készlet" @@ -6265,295 +6269,295 @@ msgstr "A fájl nem kép" msgid "Number of parts using this template" msgstr "Ennyi alkatrész használja ezt a sablont" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Paraméterek másolása" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "Teszt másolása" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "Teszt sablonok másolása az eredeti alkatrészről" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:535 +#: part/serializers.py:536 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:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:560 +#: part/serializers.py:561 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:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Kategória neve" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Gyártásban" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "Az alkatrészből jelenleg ennyi van gyártás alatt" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Már beütemezett de még nem kész gyártási mennyiség" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Készlet tételek" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "Verziók" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Beszállítók" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Teljes készlet" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:1049 +#: part/serializers.py:1050 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:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Gyártható" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "Gyártásokhoz szükséges" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "Gyártási rendelésekhez foglalva" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "Értékesítési rendeléshez szükséges" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "Értékesítési rendeléshez lefoglalva" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Minimum ár" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Maximum ár" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Megadott pénznem átváltása {default_currency}-re sikertelen" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "Szülő összeállítás kiválasztása" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "Összetevő alkatrész kijelölése" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1891 +#: part/serializers.py:1907 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:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1897 +#: part/serializers.py:1913 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:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1909 +#: part/serializers.py:1925 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" @@ -6596,31 +6600,31 @@ msgstr "Ma jár le" msgid "{days_until_expiry} days" msgstr "{days_until_expiry} nap" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "Beépülő" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "Kötelező" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "Minta" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Beépítve" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "Plugin nem törölhető mivel még aktív" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Nincs megadva művelet" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Nincs egyező művelet" @@ -7459,7 +7463,7 @@ msgstr "Csomag plugin" msgid "Plugin" msgstr "Bővítmény" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Nincs szerző" @@ -8054,135 +8058,135 @@ msgstr "Szülő hely" msgid "Filter by parent location" msgstr "Szülő helyre szűrés" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Alkatrész neve (kisbetű/nagybetű nem számít)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "Az alkatrész neve tartalmazza (kisbetű/nagybetű nem számít)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Alkatrész neve (regex)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "Alkatrész IPN (kisbetű/nagybetű nem számít)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "Alkatrész IPN tartalmazza (kisbetű/nagybetű nem számít)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "Alkatrész IPN (regexp)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Minimális készlet" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Maximális készlet" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Státuszkód" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Külső hely" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Felhasználva Gyártási Rendelésben" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Más készlettételbe beépítve" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Alkatrész fa" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Módosítva ezelőtt" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Frissítve ez után" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Leltárazva ezelőtt" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Leltárazva ezután" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Lejárat előtt" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Állott" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Adj meg egy készlettétel azonosítót - PK-t - hogy a tétel és leszármazottai kihagyásához" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "Készlethelyek alábontása" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "Az al-készlethelyeket is beleértve" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Készlethely azonosító alapján szűrés vagy a 'null'-ra" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Mennyiség megadása kötelező" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Egy érvényes alkatrészt meg kell adni" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "A megadott beszállítói alkatrész nem létezik" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "A beszállítói alkatrészhez van megadva csomagolási mennyiség, de a use_pack_size flag nincs beállítva" -#: stock/api.py:1152 +#: stock/api.py:1158 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/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8373,68 +8377,68 @@ msgstr "Alkatrésszé alakítva" msgid "Quantity exceeds available stock" msgstr "Mennyiség meghaladja az elérhető készletet" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "A mennyiség nem haladhatja meg az elérhető készletet ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Sorozatszámokat listában kell megadni" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "Ez a Teszt sablon nem létezik" -#: stock/models.py:2032 +#: stock/models.py:2031 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:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:2067 +#: stock/models.py:2066 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:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index 6f8f34befd..db3d7ed3db 100644 --- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Anda harus mengaktifkan autentikasi dua faktor sebelum melakukan hal lainnya." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Daftar item atau filter harus disediakan untuk Pekerjaan Banyak" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Barang harus disediakan sebagai daftar" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Pengguna tidak memiliki izin untuk melihat model ini" @@ -486,7 +490,7 @@ msgstr "Harus berupa angka yang valid" msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Produksi Induk" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "Order Produksi" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Hasil produksi tidak sesuai dengan order produksi" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Stok Item" @@ -1122,8 +1126,8 @@ msgstr "Alokasikan nomor seri secara otomatis" msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Item tagihan material" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktif" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponen" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Perusahaan" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Harga Minimal" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Harga Maksimal" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Perbarui" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Terpasang" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Tidak ada tindakan yang ditentukan" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Aksi tidak ditemukan" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 9cb39d495d..db8c519919 100644 --- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Devi abilitare l'autenticazione a due fattori prima di fare qualsiasi altra cosa." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "L'elenco degli articoli o dei filtri devono essere forniti per le operazioni di massa" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Gli articoli devono essere forniti come elenco" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Lista elementi fornita non valida" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "I filtri devono essere forniti come dizionario" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Filtri forniti non validi" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Tutti i filtri devono essere usati solo con true" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Nessun elemento corrisponde ai criteri forniti" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Nessun dato fornito" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "L'utente non ha i permessi per vedere questo modello" @@ -486,7 +490,7 @@ msgstr "Deve essere un numero valido" msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Produzione Genitore" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Includi Varianti" @@ -544,11 +548,11 @@ msgstr "Includi Varianti" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Includi Varianti" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Includi Varianti" msgid "Part" msgstr "Articolo" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Categoria" @@ -634,7 +638,7 @@ msgstr "Data minima" msgid "Max Date" msgstr "Data massima" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Escludi Albero" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opzionale" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Assemblaggio" @@ -694,7 +698,7 @@ msgstr "Ordine di Produzione" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "L'output della produzione non corrisponde all'ordine di compilazione" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" @@ -1036,7 +1040,7 @@ msgstr "La quantità assegnata supera la quantità disponibile a magazzino" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Articoli in magazzino" @@ -1122,8 +1126,8 @@ msgstr "Numeri di Serie Assegnazione automatica" msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Consenti Le Varianti" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Distinta base (Bom)" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Ordinato" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "In Produzione" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "Pianificato per la produzione" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Scorte esterne" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Disponibilità in magazzino" @@ -1470,19 +1474,19 @@ msgstr "Ordine di produzione in ritardo" msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "È Un Connegamento" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "E' un file" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "L'utente non ha il permesso di eliminare questi allegati" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "L'utente non ha il permesso di eliminare questo allegato" @@ -1599,7 +1603,7 @@ msgstr "Nome per questa notifica" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Attivo" @@ -2665,8 +2669,8 @@ msgstr "Gli articoli sono modelli per impostazione predefinita" msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Componente" @@ -2682,7 +2686,7 @@ msgstr "Acquistabile" msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Vendibile" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Il fornitore è attivo" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Produttore" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Azienda" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Collegamento alle informazioni sull'indirizzo (esterno)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Codice articolo produttore" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Seleziona Produttore" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "Codice articolo produttore (MPN)" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornitore" @@ -4028,7 +4032,7 @@ msgstr "Fornitore" msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" @@ -4120,7 +4124,7 @@ msgstr "Valuta predefinita utilizzata per questo fornitore" msgid "Company Name" msgstr "Nome Azienda" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "In magazzino" @@ -4276,7 +4280,7 @@ msgstr "Dati riga originali" msgid "Errors" msgstr "Errori" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Valido" @@ -5153,11 +5157,11 @@ msgstr "Unisci elementi" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Unisce gli elementi con lo stesso articolo, destinazione e data di destinazione in una riga" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" @@ -5417,43 +5421,43 @@ msgstr "Escludi sottocategorie sotto la categoria specificata" msgid "Has Results" msgstr "Ha Risultati" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "È una Variante" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "E' una revisione" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "Ha revisioni" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "BOM Valido" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "L'articolo assemblato è provabile" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Il componente è provabile" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Utilizzi" @@ -5615,7 +5619,7 @@ msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN - Numero di riferimento interno" @@ -5656,7 +5660,7 @@ msgstr "Scadenza Predefinita" 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:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Scorta Minima" @@ -6264,295 +6268,295 @@ msgstr "Il file non è un immagine" msgid "Number of parts using this template" msgstr "Numero di articoli che utilizzano questo modello" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Copia parametri" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Copia note" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Copia note dall'articolo originale" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "Copia Test" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "Copia modelli di test dall'articolo originale" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Nome Categoria" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "In Costruzione" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "Quantità di questo articolo attualmente in produzione" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Articoli in magazzino" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "Revisioni" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Fornitori" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Giacenze Totali" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Scorte Non Assegnate" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Scorta Variante" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Immagine esistente" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Nome del file di un'immagine articolo esistente" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Il file immagine non esiste" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Puoi produrre" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "Richiesto per gli Ordini di Produzione" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "Assegnato agli Ordini di Produzione" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "Richiesto per gli Ordini di Vendita" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Sovrascrivi valore calcolato per il prezzo minimo" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Valuta del prezzo minimo" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Sovrascrivi valore calcolato per il prezzo massimo" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Valuta del prezzo massimo" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Il prezzo minimo non può essere maggiore del prezzo massimo" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Il prezzo massimo non può essere minore del prezzo minimo" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "{days_until_expiry} giorni" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "Obbligatorio" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "Campione" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Installato" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "Il plugin non può essere eliminato in quanto è attualmente attivo" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Nessuna azione specificata" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Nessuna azione corrispondente trovata" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Nessun autore trovato" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Nome della parte (maiuscole e minuscole)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "Il nome della parte contiene (maiuscole e minuscole)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Nome della parte (regex)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "IPN della parte (maiuscole e minuscole)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "IPN della parte contiene (maiuscole e minuscole)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "IPN della parte (regex)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Giacenza minima" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Giacenza massima" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Codici di stato" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Ubicazione Esterna" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Obsoleto" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Deve essere fornita un articolo valido" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "I numeri di serie non possono essere forniti per un articolo non tracciabile" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Convertito in articolo" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "I numeri di serie devono essere forniti come elenco" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 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:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "L'elemento di magazzino è installato in un altro elemento" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "L'elemento di magazzino contiene altri elementi" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "L'elemento di magazzino è stato assegnato a un cliente" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "L'elemento di magazzino è attualmente in produzione" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "I codici di stato dello stock devono corrispondere" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 4150a638ad..f69a72c941 100644 --- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "二要素認証を有効にする必要があります。" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "バルク運転には、品目またはフィルターのリストが必要です" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "項目はリストとして提供されなければなりません" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "無効なアイテムリスト" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "フィルタはディクショナリとして提供されなければなりません" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "提供されたフィルタが無効" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "指定された条件に一致する項目がありません" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "ユーザーにこのモデルを表示する権限がありません" @@ -486,7 +490,7 @@ msgstr "有効な数字でなければなりません" msgid "Currency" msgstr "通貨" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "親ビルド" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "バリアントを含む" @@ -544,11 +548,11 @@ msgstr "バリアントを含む" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "バリアントを含む" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "カテゴリ" @@ -634,7 +638,7 @@ msgstr "最小日付" msgid "Max Date" msgstr "最大日付" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "ツリーを除く" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "オプション" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "アセンブリ" @@ -694,7 +698,7 @@ msgstr "組立注文" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "ビルド出力がビルド順序と一致しません" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "数量はゼロより大きくなければなりません" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "在庫商品" @@ -1122,8 +1126,8 @@ msgstr "シリアル番号の自動割り当て" msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "以下のシリアル番号は既に存在するか、無効です。" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "バリアントを許可" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "BOMアイテム" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "注文中" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "生産中" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "在庫状況" @@ -1470,19 +1474,19 @@ msgstr "期限切れ注文" msgid "Build order {bo} is now overdue" msgstr "ビルドオーダー{bo}は現在期限切れです" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "リンク" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "ファイル" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "ユーザーにはこの添付ファイルを削除する権限がありません" @@ -1599,7 +1603,7 @@ msgstr "このウェブフックの名前" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "有効" @@ -2665,8 +2669,8 @@ msgstr "パーツはデフォルトのテンプレートです" msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "コンポーネント" @@ -2682,7 +2686,7 @@ msgstr "購入可能" msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "販売可能" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "サプライヤーの活動" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "製造元" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "会社名" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "住所情報へのリンク(外部)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "メーカー・パーツ" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "メーカー選択" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "MPN" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "仕入先" @@ -4028,7 +4032,7 @@ msgstr "仕入先" msgid "Select supplier" msgstr "サプライヤーを選択" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "サプライヤー在庫管理ユニット" @@ -4120,7 +4124,7 @@ msgstr "このサプライヤーで使用されるデフォルト通貨" msgid "Company Name" msgstr "会社名" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "在庫あり" @@ -4276,7 +4280,7 @@ msgstr "元の行データ" msgid "Errors" msgstr "エラー" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "有効" @@ -5153,11 +5157,11 @@ msgstr "アイテムのマージ" msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "SKU" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "内部部品番号" @@ -5417,43 +5421,43 @@ msgstr "指定したカテゴリの下にあるサブカテゴリを除外しま msgid "Has Results" msgstr "実績あり" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "バリエーション?" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "改訂版" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "改定あり" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "BOM有効" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "組み立て部分はテスト可能" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "コンポーネント部分はテスト可能" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "用途" @@ -5615,7 +5619,7 @@ msgstr "検索結果での視認性を向上させる部分キーワード" msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "即時支払通知" @@ -5656,7 +5660,7 @@ msgstr "デフォルトの有効期限" msgid "Expiry time (in days) for stock items of this part" msgstr "この部品の在庫品の有効期限(日単位" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "最小在庫" @@ -6264,295 +6268,295 @@ msgstr "ファイルが画像ではありません" msgid "Number of parts using this template" msgstr "このテンプレートを使用する部品の数" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "オリジナルパート" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "複製する元の部品を選択" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "コピー画像" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "元の部分から画像をコピー" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "コピーBOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "元の部品から部品表をコピー" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "コピーパラメータ" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "元の部品からパラメータデータをコピー" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "コピーノート" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "元のパートからメモをコピー" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "初期在庫量" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "初期在庫場所" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "この部品の初期在庫場所を指定してください。" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "サプライヤーを選択してください。" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "メーカーを選択してください。" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "メーカー品番" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "選択された企業は有効なサプライヤーではありません。" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "選択された会社は有効な製造業者ではありません。" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "このMPNに一致するメーカー部品はすでに存在します。" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "このSKUに一致するサプライヤー部品は既に存在します。" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "カテゴリ名" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "建物" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "在庫商品" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "リビジョン" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "仕入先" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "総在庫" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "未割当株式" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "バリアントストック" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "重複部分" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "別のパートから初期データをコピー" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "初期在庫" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "初期在庫数で部品を作成" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "サプライヤー情報" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "この部品の初期サプライヤー情報を追加します。" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "コピーカテゴリパラメータ" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "既存イメージ" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "既存の部品画像のファイル名" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "画像ファイルが存在しません" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "部品表全体の検証" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "ビルド" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "最小価格" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "最低価格の計算値の上書き" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "最低価格通貨" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "最大価格" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "最高価格の計算値を上書き" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "最高価格通貨" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "更新" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "この部品の価格を更新" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "提供された通貨から{default_currency}に変換できませんでした。" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "最低価格は最高価格を超えてはなりません。" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "最高価格は最低価格を下回ってはなりません。" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "親アセンブリを選択" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "構成部品の選択" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "BOMをコピーする部品を選択します。" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "既存データの削除" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "コピー前に既存のBOMアイテムを削除" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "インクルード継承" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "テンプレート化された部品から継承されたBOM項目を含めます。" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "無効な行をスキップ" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "無効な行をスキップするには、このオプションを有効にします。" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "コピー代用部品" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOMアイテムの重複時に代替部品をコピー" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "組み込み" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "必須" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "サンプル" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "インストール済み" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "プラグインは現在アクティブなので削除できません。" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "アクションが指定されていません" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "一致するアクションが見つかりませんでした" @@ -7458,7 +7462,7 @@ msgstr "パッケージプラグイン" msgid "Plugin" msgstr "プラグイン" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "著者は見つかりませんでした" @@ -8053,135 +8057,135 @@ msgstr "親の位置" msgid "Filter by parent location" msgstr "親の所在地でフィルタリング" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "部品名(大文字・小文字を区別しません)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "パート名に含まれるもの(大文字・小文字を区別しません)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "部品名(正規表現)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "パートIPN(大文字と小文字を区別しません)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "パートIPNに含まれるもの(大文字と小文字は区別されません)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "パートIPN(正規表現)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "最小在庫" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "最大在庫" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "ステータスコード" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "外部ロケーション" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "ビルド・オーダーで消費" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "その他在庫品に装着" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "パートツリー" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "更新前" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "更新後" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "ストックテイク前" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "ストックテイク後" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "有効期限" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "有効期限" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "期限失効" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "数量が必要です" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "有効な部品を供給する必要があります。" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "指定されたサプライヤの部品が存在しません。" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "サプライヤー部品にはパックサイズが定義されていますが、use_pack_sizeフラグが設定されていません。" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "追跡不可能な部品については、シリアル番号は提供できません。" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "パートに変換" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "部品が追跡可能に設定されていません" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "数量は整数でなければなりません。" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量は在庫数 ({self.quantity}) を超えてはなりません。" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "シリアル番号はリストとして提供されなければなりません" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "数量がシリアル番号と一致しません" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "テストテンプレートが存在しません" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "在庫商品が販売注文に割り当てられました" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "ストックアイテムが他のアイテムに装着されている場合" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "在庫商品には他の商品が含まれています。" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "在庫商品が顧客に割り当てられました" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "在庫品は現在生産中です。" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "連番在庫の統合はできません" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "在庫品の重複" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "在庫品目は同じ部品を参照してください。" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "在庫品は同じサプライヤーの部品を参照する必要があります。" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "在庫状況コードが一致していること" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index 3e8465e2c6..0524d1e0d6 100644 --- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "이 모델을 볼 수 있는 권한이 없습니다." @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "분류" @@ -634,7 +638,7 @@ msgstr "최소 날짜" msgid "Max Date" msgstr "최대 날짜" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "선택사항" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index dc6319b414..ce722e9769 100644 --- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Prieš atliekant bet kokius veiksmus, privalote įjungti dviejų veiksnių autentifikavimą." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API galinis taškas nerastas" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Masiniam veiksmui turi būti pateiktas elementų arba filtrų sąrašas" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Elementai turi būti pateikti kaip sąrašas" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Pateiktas neteisingas elementų sąrašas" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "\"Filtrai turi būti pateikti kaip žodynas" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Pateikti neteisingi filtrai" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Filtras „all“ gali būti naudojamas tik su reikšme „true“" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Nė vienas elementas neatitinka pateiktų kriterijų" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Vartotojas neturi teisių peržiūrėti šio modelio" @@ -486,7 +490,7 @@ msgstr "Turi būti teisingas skaičius" msgid "Currency" msgstr "Valiuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Pasirinkite valiutą iš galimų variantų" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Pirminė gamyba" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Įtraukti variantus" @@ -544,11 +548,11 @@ msgstr "Įtraukti variantus" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Įtraukti variantus" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Įtraukti variantus" msgid "Part" msgstr "Detalė" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategorija" @@ -634,7 +638,7 @@ msgstr "Minimali data" msgid "Max Date" msgstr "Maksimali data" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Neįtraukti medžio struktūros" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Pasirinktinai" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Surinkimas" @@ -694,7 +698,7 @@ msgstr "Gamybos užsakymas" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Gamybos rezultatas neatitinka gamybos užsakymo" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Kiekis turi būti didesnis nei nulis" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Atsargų elementas" @@ -1122,8 +1126,8 @@ msgstr "Automatiškai priskirti serijos numerius" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Leisti variantus" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "BOM elementas" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Užsakyta" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "Gamyboje" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Išorinės atsargos" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Prieinamos atsargos" @@ -1470,19 +1474,19 @@ msgstr "Vėluojantis gamybos užsakymas" msgid "Build order {bo} is now overdue" msgstr "Gamybos užsakymas {bo} dabar vėluoja" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Yra nuoroda" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Yra failas" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "Vartotojas neturi teisės ištrinti šių priedų" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Vartotojas neturi teisės ištrinti šio priedo" @@ -1599,7 +1603,7 @@ msgstr "Šio webhook'o pavadinimas" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktyvus" @@ -2665,8 +2669,8 @@ msgstr "Detalės pagal nutylėjimą yra šablonai" msgid "Parts can be assembled from other components by default" msgstr "Detalės pagal nutylėjimą gali būti surenkamos iš kitų komponentų" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponentas" @@ -2682,7 +2686,7 @@ msgstr "Galima įsigyti" msgid "Parts are purchaseable by default" msgstr "Detalės pagal nutylėjimą gali būti įsigyjamos" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Parduodama" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Gamintojas" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Įmonė" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Nuoroda į adreso informaciją (išorinė)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Gamintojo detalė" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "MPN" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Susieta gamintojo detalė turi nurodyti tą pačią pagrindinę detalę" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tiekėjas" @@ -4028,7 +4032,7 @@ msgstr "Tiekėjas" msgid "Select supplier" msgstr "Pasirinkite tiekėją" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Tiekėjo sandėlio numeris (SKU)" @@ -4120,7 +4124,7 @@ msgstr "Numatytoji valiuta, naudojama šiam tiekėjui" msgid "Company Name" msgstr "Įmonės pavadinimas" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Sandėlyje" @@ -4276,7 +4280,7 @@ msgstr "Pradiniai eilutės duomenys" msgid "Errors" msgstr "Klaidos" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Galiojantis" @@ -5153,11 +5157,11 @@ msgstr "Sujungti elementus" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sujungti elementus su ta pačia detale, paskirtimi ir tiksline data į vieną eilutės įrašą" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "SKU" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Vidinis detalės numeris" @@ -5417,43 +5421,43 @@ msgstr "Neįtraukti sub-kategorijų po nurodyta kategorija" msgid "Has Results" msgstr "Turi rezultatų" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "Yra variantas" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "Yra versija" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "Turi versijų" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "BOM galiojantis" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "Surinkimo detalė gali būti testuojama" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Komponento detalė gali būti testuojama" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Naudoja" @@ -5615,7 +5619,7 @@ msgstr "Detalės raktažodžiai, skirti pagerinti matomumą paieškos rezultatuo msgid "Part category" msgstr "Detalės kategorija" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5656,7 +5660,7 @@ msgstr "Numatytasis galiojimo laikas" msgid "Expiry time (in days) for stock items of this part" msgstr "Šios detalės atsargų galiojimo laikas (dienomis)" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimalus atsargų kiekis" @@ -6264,295 +6268,295 @@ msgstr "Failas nėra paveikslėlis" msgid "Number of parts using this template" msgstr "Detalių, naudojančių šį šabloną, skaičius" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Pradinė detalė" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Pasirinkite pradinę detalę kopijavimui" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kopijuoti paveikslėlį" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Kopijuoti paveikslėlį iš pradinės detalės" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Kopijuoti BOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Kopijuoti parametrus" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Kopijuoti parametrų duomenis iš pradinės detalės" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Kopijuoti pastabas" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Kopijuoti pastabas iš pradinės detalės" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Pradinis atsargų kiekis" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Nurodykite pradinį atsargų kiekį šiai detalei. Jei kiekis nulis - atsargos nebus pridėtos." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Pradinė atsargų vieta" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Nurodykite pradinę atsargų vietą šiai detalei" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Pasirinkite tiekėją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Pasirinkite gamintoją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Gamintojo detalės numeris" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "Pasirinkta įmonė nėra galiojantis gamintojas" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Kategorijos pavadinimas" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Surinkimas" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Atsargos" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "Versijos" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Tiekėjai" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Bendros atsargos" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Nepriskirtos atsargos" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Variantų atsargos" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Kopijuoti detalę" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Kopijuoti pradinius duomenis iš kitos detalės" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Pradinės atsargos" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Sukurti detalę su pradiniu atsargų kiekiu" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Tiekėjo informacija" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Kopijuoti kategorijos parametrus" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Esamas paveikslėlis" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Esamos detalės paveikslėlio failo pavadinimas" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Paveikslėlio failas neegzistuoja" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Patvirtinti visą komplektavimo žiniaraštį" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Galima surinkti" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Mažiausia kaina" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Pakeisti apskaičiuotą mažiausią kainą" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Mažiausios kainos valiuta" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Didžiausia kaina" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Pakeisti apskaičiuotą didžiausią kainą" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Didžiausios kainos valiuta" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Atnaujinti" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Atnaujinti šios detalės kainodarą" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nepavyko konvertuoti iš nurodytų valiutų į {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Mažiausia kaina negali būti didesnė už didžiausią kainą" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Didžiausia kaina negali būti mažesnė už mažiausią kainą" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "Pasirinkite pirminį surinkimą" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "Pasirinkite komponentinę detalę" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Pašalinti esamus duomenis" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Pašalinti esamus BOM elementus prieš kopijuojant" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Įtraukti paveldėtus" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Įtraukti BOM elementus, paveldėtus iš šabloninių detalių" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Praleisti netinkamas eilutes" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Kopijuoti pakaitines detales" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "Integruotas" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "Privalomas" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "Pavyzdys" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Įdiegtas" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "Įskiepis negali būti ištrintas, nes šiuo metu yra aktyvus" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Nenurodytas joks veiksmas" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Atitinkantis veiksmas nerastas" @@ -7458,7 +7462,7 @@ msgstr "Pakuotės įskiepis" msgid "Plugin" msgstr "Įskiepis" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Autorius nerastas" @@ -8053,135 +8057,135 @@ msgstr "Pirminė vieta" msgid "Filter by parent location" msgstr "Filtruoti pagal pirminę vietą" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Detalės pavadinimas (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "Detalės pavadinimas turi (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Detalės pavadinimas (reguliarioji išraiška)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "Detalės IPN (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "Detalės IPN turi (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "Detalės IPN (reguliarioji išraiška)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Mažiausias kiekis" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Didžiausias kiekis" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Būsenos kodas" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Išorinė vieta" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Sunaudota gamybos užsakyme" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Sumontuota kitame atsargų elemente" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Detalių medis" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Atnaujinta iki" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Atnaujinta po" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Inventorizacija iki" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Inventorizacija po" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Galiojimo data iki" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Galiojimo data po" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Pasenusi" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Reikalingas kiekis" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Turi būti pateikta galiojanti detalė" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Nurodyta tiekėjo detalė neegzistuoja" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Tiekėjo detalė turi nustatytą pakuotės dydį, bet nepažymėtas požymis use_pack_size" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serijos numeriai negali būti pateikti detalei, kurios negalima sekti" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Konvertuota į detalę" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Detalė nenustatyta kaip sekama" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Kiekis turi būti sveikasis skaičius" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Serijos numeriai turi būti pateikti sąraše" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Kiekis nesutampa su serijos numeriais" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "Bandomasis šablonas neegzistuoja" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Atsargų elementas buvo priskirtas pardavimo užsakymui" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Atsargų elementas sumontuotas kitame elemente" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Atsargų elementas turi kitų elementų" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Atsargų elementas buvo priskirtas klientui" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Atsargų elementas šiuo metu gaminamas" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Su serijos numeriais pažymėtų atsargų sujungti negalima" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Pasikartojantys atsargų elementai" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Atsargų elementai turi būti susiję su ta pačia detale" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Atsargų elementai turi būti susiję su ta pačia tiekėjo detale" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Atsargų būsenos kodai turi sutapti" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index 7cd4f7d0d0..5ebdca1fae 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API galapunkts nav atrasts" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 3645201ae3..28f0d3e5ae 100644 --- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Schakel tweestapsverificatie in voordat je iets anders kunt doen." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Lijst met items of filters moet worden opgegeven voor bulk bewerking" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Items moeten worden opgegeven als een lijst" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Ongeldige items lijst verstrekt" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Filters moeten als woordenboek worden opgegeven" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Ongeldige filters opgegeven" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Alles filteren alleen gebruiken met True" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Geen items die overeenkomen met de opgegeven criteria" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Geen gegevens verstrekt" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Gebruiker heeft geen rechten om dit model te bekijken" @@ -486,7 +490,7 @@ msgstr "Moet een geldig nummer zijn" msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Bovenliggende Productie" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Inclusief varianten" @@ -544,11 +548,11 @@ msgstr "Inclusief varianten" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Inclusief varianten" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Inclusief varianten" msgid "Part" msgstr "Onderdeel" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Categorie" @@ -634,7 +638,7 @@ msgstr "Min. datum" msgid "Max Date" msgstr "Max. datum" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Boomstructuur uitsluiten" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Optioneel" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Samenstelling" @@ -694,7 +698,7 @@ msgstr "Productieorder" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Productuitvoer komt niet overeen met de Productieorder" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" @@ -1036,7 +1040,7 @@ msgstr "Toegewezen hoeveelheid overschrijdt de beschikbare voorraad hoeveelheid" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Voorraadartikel" @@ -1122,8 +1126,8 @@ msgstr "Serienummers automatisch toewijzen" msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Varianten toestaan" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Stuklijstartikel" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "In bestelling" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "In productie" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "Gepland om te bouwen" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Externe voorraad" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Beschikbare Voorraad" @@ -1470,19 +1474,19 @@ msgstr "Achterstallige Productieorder" msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Is koppeling" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Is een bestand" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "Gebruiker heeft geen toestemming om deze bijlagen te verwijderen" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen." @@ -1599,7 +1603,7 @@ msgstr "Naam van deze webhook" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Actief" @@ -2665,8 +2669,8 @@ msgstr "Onderdelen zijn standaard sjablonen" msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Onderdeel" @@ -2682,7 +2686,7 @@ msgstr "Koopbaar" msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Verkoopbaar" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Leverancier is actief" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Fabrikant" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Bedrijf" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Link naar adres gegevens (extern)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Fabrikant selecteren" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "Fabrikant artikel nummer" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverancier" @@ -4028,7 +4032,7 @@ msgstr "Leverancier" msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Voorraad beheers eenheid voor leveranciers" @@ -4120,7 +4124,7 @@ msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier" msgid "Company Name" msgstr "Bedrijfsnaam" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Op voorraad" @@ -4276,7 +4280,7 @@ msgstr "Oorspronkelijke rij gegevens" msgid "Errors" msgstr "Fouten" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Geldig" @@ -5154,11 +5158,11 @@ msgstr "Items samenvoegen" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Items met hetzelfde onderdeel, bestemming en doeldatum samenvoegen in één regelitem" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "SKU" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" @@ -5418,43 +5422,43 @@ msgstr "Subcategorieën uitsluiten in de opgegeven categorie" msgid "Has Results" msgstr "Heeft resultaten" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "Is een variant" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "Is revisie" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "Heeft revisies" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "BOM Valid" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "Assemblage deel is testbaar" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Component onderdeel is testbaar" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Gebruik" @@ -5616,7 +5620,7 @@ msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbete msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5657,7 +5661,7 @@ msgstr "Standaard verval datum" msgid "Expiry time (in days) for stock items of this part" msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimum voorraad" @@ -6265,295 +6269,295 @@ msgstr "Bestand is geen afbeelding" msgid "Number of parts using this template" msgstr "Aantal onderdelen die deze sjabloon gebruiken" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Oorspronkelijk onderdeel" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Selecteer origineel onderdeel om te dupliceren" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Copy BOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Kopieer materiaal van het oorspronkelijke deel" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Parameters kopiëren" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Notities kopiëren" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Kopieer notities van het originele deel" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "Tests kopiëren" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "Test sjablonen kopiëren van het originele deel" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Eerste voorraad hoeveelheid" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificeer de initiële voorraad hoeveelheid voor dit onderdeel. Als het aantal nul is, wordt er geen voorraad toegevoegd." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Eerste voorraad locatie" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Fabrikant artikel nummer" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "Geselecteerde onderneming is geen geldige leverancier" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "Geselecteerde bedrijf is geen geldige fabrikant" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Categorie naam" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Bouwen" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "Hoeveelheid van dit deel dat momenteel in productie is" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Er zal een onuitputtelijke hoeveelheid van dit deel worden gebouwd" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Voorraadartikelen" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "Revisies" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Leveranciers" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Totale Voorraad" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Niet toegewezen voorraad" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Variant voorraad" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Dupliceer onderdeel" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Kopieer eerste gegevens uit een ander onderdeel" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Eerste voorraad" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Maak onderdeel met eerste voorraad" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Leveranciersgegevens" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Categorie parameters kopiëren" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Bestaande afbeelding" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Bestandsnaam van een bestaande onderdeel afbeelding" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Afbeeldingsbestand bestaat niet" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Valideer de gehele materiaalbon" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Kan bouwen" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "Vereist voor bouworders" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "Toegewezen aan bouwen van orders" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "Vereist voor verkooporders" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Minimale prijs" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Overschrijf berekende waarde voor minimale prijs" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Minimale prijs valuta" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Maximale prijs" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Overschrijf de berekende waarde voor de maximale prijs" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Maximale prijs valuta" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Bijwerken" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Prijzen voor dit onderdeel bijwerken" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan niet converteren van de verstrekte valuta naar {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "Selecteer de bovenliggende assemblage" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "Selecteer het onderdeel" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Selecteer onderdeel om BOM van te kopiëren" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Bestaande gegevens verwijderen" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Verwijder bestaande BOM items voor het kopiëren" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Inclusief overgenomen" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Ongeldige regels overslaan" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Schakel deze optie in om ongeldige rijen over te slaan" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Verwijder vervangend deel" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items" @@ -6596,31 +6600,31 @@ msgstr "Verloopt vandaag" msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dagen" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "Ingebouwd" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "verplicht" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "Voorbeeld" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Geïnstalleerd" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "De plug-in kan niet worden verwijderd omdat deze momenteel actief is" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Geen actie gespecificeerd" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Geen overeenkomende actie gevonden" @@ -7459,7 +7463,7 @@ msgstr "Pakket plug-in" msgid "Plugin" msgstr "Plug-in" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Geen auteur gevonden" @@ -8054,135 +8058,135 @@ msgstr "Bovenliggende locatie" msgid "Filter by parent location" msgstr "Filter op bovenliggende locatie" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Naam van onderdeel (hoofdletter ongevoelig)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "Naam van onderdeel bevat (hoofdletter ongevoelig)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Naam onderdeel (regex)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "Deel IPN (hoofdletter ongevoelig)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "Onderdeel IPN bevat (hoofdletter ongevoelig)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "Deel IPN (regex)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Minimale voorraad" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Maximale voorraad" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Status code" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Externe locatie" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Verbruikt door productieorder" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Geïnstalleerd in een ander voorraadartikel" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Boomstructuur onderdeel" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Eerder bijgewerkt" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Bijgewerkt na" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Voorraadcontrole voor" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Voorraadcontrole na" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Vervaldatum voor" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Vervaldatum na" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Verouderd" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Voorraad PK om dit item en al zijn afstammelingen uit te sluiten" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "Cascade locaties" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "Indien waar, inclusief items op de onderliggende locaties van de opgegeven locatie" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Filter op numerieke locatie ID of de letterlijke 'null'" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Hoeveelheid is vereist" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Geldig onderdeel moet worden opgegeven" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Het opgegeven leveranciers onderdeel bestaat niet" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Het leveranciersdeel heeft een pakketgrootte gedefinieerd, maar vlag use_pack_size niet ingesteld" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienummers kunnen niet worden meegeleverd voor een niet traceerbaar onderdeel" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8373,68 +8377,68 @@ msgstr "Omgezet tot onderdeel" msgid "Quantity exceeds available stock" msgstr "Hoeveelheid overschrijdt beschikbare voorraad" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Onderdeel is niet ingesteld als traceerbaar" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Hoeveelheid moet heel getal zijn" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Serienummers moeten als lijst worden opgegeven" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Hoeveelheid komt niet overeen met serienummers" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "Testsjabloon bestaat niet" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Voorraad item is geïnstalleerd in een ander item" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Voorraadartikel bevat andere producten" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Voorraadartikel is aan een klant toegewezen" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Voorraad item is momenteel in productie" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Geserialiseerde voorraad kan niet worden samengevoegd" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Dupliceer voorraadartikelen" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Voorraadartikelen moeten hetzelfde onderdeel verwijzen" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Voorraadartikelen moeten verwijzen naar dezelfde leveranciersdeel" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "De voorraad statuscodes moeten overeenkomen" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index 7cb16a6659..fefcb52072 100644 --- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API-endepunkt ikke funnet" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Brukeren har ikke rettigheter til å se denne modellen" @@ -486,7 +490,7 @@ msgstr "Må være et gyldig tall" msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Overordnet produksjon" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategori" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Valgfritt" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Sammenstilling" @@ -694,7 +698,7 @@ msgstr "Produksjonsordre" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Lagervare" @@ -1122,8 +1126,8 @@ msgstr "Automatisk tildeling av serienummer" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Tillat Varianter" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "BOM-artikkel" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "I bestilling" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Ekstern lagerbeholdning" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" @@ -1470,19 +1474,19 @@ msgstr "Forfalt produksjonsordre" msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Er lenke" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Er fil" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" @@ -1599,7 +1603,7 @@ msgstr "Navn for webhooken" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiv" @@ -2665,8 +2669,8 @@ msgstr "Deler er maler som standard" msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponent" @@ -2682,7 +2686,7 @@ msgstr "Kjøpbar" msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Salgbar" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Leverandør er aktiv" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Produsent" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Firma" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Produsentdeler" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Velg produsent" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "MPN" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverandør" @@ -4028,7 +4032,7 @@ msgstr "Leverandør" msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" @@ -4120,7 +4124,7 @@ msgstr "Standardvaluta brukt for denne leverandøren" msgid "Company Name" msgstr "Bedriftsnavn" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "På lager" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Gyldig" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Internt delnummer" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" msgid "Part category" msgstr "Delkategori" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "Standard utløp" msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Kopier parametere" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Angi initiell lagermengde for denne delen. Hvis antall er null, er ingen lagerbeholdning lagt til." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Kategorinavn" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Produseres" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagervarer" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Leverandører" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Total lagerbeholdning" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Kan Produsere" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Minstepris" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Makspris" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan ikke konvertere fra gitte valutaer til {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Installert" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Ingen handling spesifisert" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Ingen samsvarende handling funnet" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Utvidelse" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Ingen forfatter funnet" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Statuskode" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Ekstern plassering" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Del-tre" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Utløpsdato før" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Foreldet" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Antall kreves" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Gyldig del må oppgis" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Oppgitt leverandørdel eksisterer ikke" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Leverandørdelen har en pakkestørrelse definert, men flagget \"use_pack_size\" er ikke satt" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienumre kan ikke angis for en ikke-sporbar del" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Konvertert til del" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Delen er ikke angitt som sporbar" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Antall må være heltall" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Antallet stemmer ikke overens med serienumrene" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Lagervare har blitt tildelt en salgsordre" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Lagervare er montert i en annen artikkel" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Lagervare inneholder andre artikler" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Lagervare har blitt tildelt til en kunde" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Lagervare er for tiden i produksjon" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Duplisert lagervare" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Lagervarer må referere til samme del" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Lagervarer må referere til samme leverandørdel" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Lagerstatuskoder må være like" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index 7fa1d1ed2b..f03ab1934f 100644 --- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Musisz włączyć uwierzytelnianie dwuskładnikowe przed wykonaniem czegokolwiek innego." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Dla operacji masowych należy podać wykaz przedmiotów lub filtrów" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Elementy muszą być podane jako lista" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Podano nieprawidłową listę artykułów" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Filtry muszą być dostarczone jako kartka" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Podano niepoprawne filtry" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Wszystkie filtry muszą być używane tylko z true" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Żaden element nie spełnia podanych kryteriów" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Nie dostarczono danych" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" @@ -486,7 +490,7 @@ msgstr "Numer musi być prawidłowy" msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Budowa nadrzędna" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Obejmuje warianty" @@ -544,11 +548,11 @@ msgstr "Obejmuje warianty" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Obejmuje warianty" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Obejmuje warianty" msgid "Part" msgstr "Komponent" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategoria" @@ -634,7 +638,7 @@ msgstr "Minimalna data" msgid "Max Date" msgstr "Maksymalna data" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Wyklucz drzewo" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opcjonalne" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Złożenie" @@ -694,7 +698,7 @@ msgstr "Zlecenie Budowy" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" @@ -1036,7 +1040,7 @@ msgstr "Przydzielona ilość przekracza dostępną ilość zapasów" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Element magazynowy" @@ -1122,8 +1126,8 @@ msgstr "Automatycznie przydzielaj numery seryjne" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Zezwalaj na warianty" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Element BOM" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "W Zamówieniu" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Zew. zasoby magazynowe" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Dostępna ilość" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Jest plikiem" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktywny" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponent" @@ -2682,7 +2686,7 @@ msgstr "Możliwość zakupu" msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Możliwość sprzedaży" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Producent" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Firma" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Komponent producenta" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Wybierz producenta" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dostawca" @@ -4028,7 +4032,7 @@ msgstr "Dostawca" msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "Domyślna waluta używana dla tego dostawcy" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Na stanie" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Ważny" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "Domyślne wygasanie" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Kopiuj parametry" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Towary" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Dostawcy" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Zainstalowane" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Nie określono działania" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Nie znaleziono pasującej akcji" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Wtyczka" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Nie znaleziono autora" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 1542c46ebd..c595e28a33 100644 --- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API endpoint não encontrado" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Usuário não tem permissão para ver este modelo" @@ -486,7 +490,7 @@ msgstr "Preicsa ser um numero valido" msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Selecione a Moeda nas opções disponíveis" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Produção Progenitor" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Peça" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Categoria" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opcional" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Montagem" @@ -694,7 +698,7 @@ msgstr "Ordem de Produção" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Saída da produção não corresponde ao Pedido de Produção" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Item de estoque" @@ -1122,8 +1126,8 @@ msgstr "Alocar Números de Série Automaticamente" msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Permitir variações" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Item LDM" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "No pedido" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Estoque Disponível" @@ -1470,19 +1474,19 @@ msgstr "Pedido de produção vencido" msgid "Build order {bo} is now overdue" msgstr "Pedido de produção {bo} está atrasada" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "É uma Ligação" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "O Utilizador não tem permissão para remover este anexo" @@ -1599,7 +1603,7 @@ msgstr "Nome para este webhook" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Ativo" @@ -2665,8 +2669,8 @@ msgstr "Peças são modelos por padrão" 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/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Componente" @@ -2682,7 +2686,7 @@ msgstr "Comprável" msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Vendível" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Fabricante" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Empresa" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Peça do Fabricante" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Selecionar fabricante" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "NPF" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornecedor" @@ -4028,7 +4032,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4120,7 +4124,7 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Em Estoque" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Válido" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Numero interno do produto" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "Validade Padrão" 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:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Estoque Mínimo" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Peça Original" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Copiar imagem" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Copiar LDM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Copiar Parâmetros" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Nome da Categoria" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Produzindo" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Fornecedores" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:1049 +#: part/serializers.py:1050 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:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Validar a Lista de Materiais completa" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Pode Produzir" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Preço Máximo" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Não foi possível converter das moedas fornecidas para {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Preço mínimo não pode ser maior que o preço máximo" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Preço máximo não pode ser menor que o preço mínimo" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:1897 +#: part/serializers.py:1913 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:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Instalado" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Nenhuma ação especificada" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Nenhuma ação correspondente encontrada" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Extensões" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Nenhum autor encontrado" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Código da situação" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Localização externa" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Árvore de Peças" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Data de validade antes" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Data de validade depois" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Inativo" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Quantidade obrigatória" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Uma peça válida deve ser fornecida" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "A peça do fornecedor informado não existe" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "A peça do fornecedor tem um tamanho de pacote definido, mas o item use_pack_size não foi definida" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Números de série não podem ser fornecidos para uma parte não rastreável" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Convertido para peça" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Peça não está definida como rastreável" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Quantidade deve ser inteira" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Quantidade não deve exceder a quantidade em estoque ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "A quantidade não corresponde aos números de série" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Item em estoque foi reservado para um pedido" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Item em estoque está instalado em outro item" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "item em estoque contem outro(s) items" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Item em estoque foi reservado para outro cliente" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Item no estoque está em produção no momento" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Item de estoque duplicado" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Itens de estoque devem se referir à mesma peça" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Itens de estoque devem se referir à mesma peça do fornecedor" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Códigos de estado do estoque devem corresponder" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index 0c7c182579..8ef57d58ad 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Você deve habilitar a autenticação de dois fatores antes de fazer qualquer coisa." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API endpoint não encontrado" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "A lista de itens ou filtros devem ser fornecidas para operação em massa" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Os itens devem ser fornecidos como lista" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Lista de itens inválida fornecida" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Filtros devem ser fornecidos como" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Filtros inválidos fornecidos" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Todos os filtros devem ser usados apenas como verdadeiro" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Nenhum item corresponde com os critérios fornecidos" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Nenhum dado fornecido" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "O usuário não tem permissão para visualizar esse modelo" @@ -486,7 +490,7 @@ msgstr "Deve ser um número válido" msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Selecione a moeda entre as opções disponíveis" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Produção Progenitora" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Incluir Variáveis" @@ -544,11 +548,11 @@ msgstr "Incluir Variáveis" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Incluir Variáveis" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Incluir Variáveis" msgid "Part" msgstr "Parte" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Categoria" @@ -634,7 +638,7 @@ msgstr "Data Mínima" msgid "Max Date" msgstr "Data máxima" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Excluir árvore" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opcional" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Montagem" @@ -694,7 +698,7 @@ msgstr "Ordem da compilação" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Saída da produção não corresponde à Ordem de Produção" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Item de Estoque" @@ -1122,8 +1126,8 @@ msgstr "Alocar Números de Série Automaticamente" msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Permitir variantes" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Item BOM" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Em pedido" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "Agendado para produção" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Estoque Externo" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Estoque Disponível" @@ -1470,19 +1474,19 @@ msgstr "Ordem de produção vencido" msgid "Build order {bo} is now overdue" msgstr "Ordem de produção {bo} está atrasada" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "É um link" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "O usuário não tem permissão para deletar esses anexos" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "O usuário não tem permissão para deletar esse anexo" @@ -1599,7 +1603,7 @@ msgstr "Nome para este webhook" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Ativo" @@ -2665,8 +2669,8 @@ msgstr "Peças são modelos por padrão" 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/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Componente" @@ -2682,7 +2686,7 @@ msgstr "Comprável" msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Comercializável" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "O fornecedor está Ativo" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Fabricante" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Empresa" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Fabricante da peça" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Selecionar fabricante" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "NPF" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornecedor" @@ -4028,7 +4032,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4120,7 +4124,7 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "Nome da Empresa" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Em Estoque" @@ -4276,7 +4280,7 @@ msgstr "Dados da linha original" msgid "Errors" msgstr "Erros" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Válido" @@ -5153,11 +5157,11 @@ msgstr "Mesclar Itens" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Número Interno da Peça" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "Validade Padrão" 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:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Estoque Mínimo" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Estoque Inicial" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Ignorar Linhas Inválidas" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Habilite essa opção para ignorar linhas inválidas" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dias" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "Obrigatório" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "Exemplo" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Instalado" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Nenhuma ação especificada" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Estoque mínimo" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Estoque máximo" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index 283e59c8b2..2eb6b41316 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Utilizatorul nu are permisiunea de a vedea acest model" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 33078f5fe6..7d94c3c918 100644 --- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Вы должны включить двухфакторную аутентификацию, прежде чем делать что-нибудь еще." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" -msgstr "" +msgstr "Не верные фильтры" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" -msgstr "" +msgstr "Все фильтры будут использоваться с параметром True" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Нет элементов, соответствующих заданным критериям" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "У пользователя недостаточно прав для просмотра этой модели!" @@ -110,7 +114,7 @@ msgstr "Введите дату" #: InvenTree/fields.py:161 msgid "Invalid decimal value" -msgstr "" +msgstr "Не верное десятичное значение" #: InvenTree/fields.py:210 InvenTree/models.py:1061 build/serializers.py:511 #: build/serializers.py:582 build/serializers.py:1800 company/models.py:875 @@ -133,7 +137,7 @@ msgstr "Предоставленное значение не соответст #: InvenTree/helpers.py:556 msgid "Cannot serialize more than 1000 items at once" -msgstr "" +msgstr "Одновременно можно сериализовать только 1000 элементов" #: InvenTree/helpers.py:562 msgid "Empty serial number string" @@ -161,7 +165,7 @@ msgstr "Серийных номеров не найдено" #: InvenTree/helpers.py:727 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "Количество уникальных серийных номеров ({n}) должно быть равно ({q})" #: InvenTree/helpers.py:857 msgid "Remove HTML tags from this value" @@ -169,7 +173,7 @@ msgstr "Удалить HTML теги из этого значения" #: InvenTree/helpers.py:936 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "Данные содержат недопустимую разметку" #: InvenTree/helpers_model.py:132 msgid "Connection error" @@ -468,7 +472,7 @@ msgstr "Задача не удалась" #: InvenTree/models.py:1264 #, python-brace-format msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" +msgstr "Фоновый процесс '{f}' после {n} попыток завершился с ошибкой" #: InvenTree/models.py:1291 msgid "Server Error" @@ -486,7 +490,7 @@ msgstr "Должно быть действительным номером" msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" @@ -508,7 +512,7 @@ msgstr "Загрузка изображений с удаленного URL-ад #: InvenTree/serializers.py:528 msgid "Failed to download image from remote URL" -msgstr "" +msgstr "Не удалось загрузить изображение из URL адреса" #: InvenTree/tasks.py:575 msgid "Update Available" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Родительский заказ на производство" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Категория" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Необязательно" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Сборная деталь" @@ -694,7 +698,7 @@ msgstr "Заказ на производство" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Продукция не совпадает с заказом на про #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Складская позиция" @@ -1122,8 +1126,8 @@ msgstr "Автоматически выделить серийные номер msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Есть варианты" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Позиция BOM" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "В заказе" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Доступный запас" @@ -1470,19 +1474,19 @@ msgstr "Просроченный заказ сборки" msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Ссылка" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Файл" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "У пользователя нет прав для удаления этих вложений" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "У пользователя нет прав на удаление этого вложения" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Активный" @@ -2665,8 +2669,8 @@ msgstr "По умолчанию детали являются шаблонами msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Компонент" @@ -2682,7 +2686,7 @@ msgstr "Можно купить" msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Можно продавать" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Производитель" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Компания" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Ссылка на адресную информацию (внешняя)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Производитель детали" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Выберите производителя" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "Артикул производителя" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Поставщик" @@ -4028,7 +4032,7 @@ msgstr "Поставщик" msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Артикул поставщика" @@ -4120,7 +4124,7 @@ msgstr "Валюта по умолчанию для этого поставщи msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "На складе" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "Ошибки" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Корректный" @@ -5153,11 +5157,11 @@ msgstr "Объединять элементы" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Внутренний артикул детали" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "Сборная деталь тестируется" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Компонент тестируется" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "Ключевые слова для улучшения видимости msgid "Part category" msgstr "Категория" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Внутренний артикул" @@ -5656,7 +5660,7 @@ msgstr "Срок действия по умолчанию" msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Минимальный запас" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Скопировать параметры" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Начальное количество на складе" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Задайте начальное количество этой детали на складе. Если количество равно 0, складская позиция не будет добавлена." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Артикул производителя" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Деталь производителя с данным артикулом уже существует" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Деталь поставщика с данным артикулом уже существует" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Название категории" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Производится" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Складские позиции" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Поставщики" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Общий запас" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Создавать деталь с начальным количеством на складе" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Информация о поставщике" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Добавить начальную информацию о поставщике для этой детали" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Можно произвести" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Переопределить рассчитанное значение минимальной цены" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Валюта минимальной цены" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Переопределить рассчитанное значение максимальной цены" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Валюта максимальной цены" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "Выберите деталь, которая является компонентом" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Пропустить некорректные строки" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "Обязательно" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Установлено" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Действие не указано" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Соответствующее действие не найдено" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Плагин" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Автор не найден" @@ -8053,135 +8057,135 @@ msgstr "Основной склад" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Код статуса" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Израсходовано для заказов на сборку" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Древо Деталей" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Залежалый" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Необходимо указать количество" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Не нужно указывать серийные номера для неотслеживаемых деталей" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Складская позиция была назначена заказу на продажу" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Складская позиция установлена в другую деталь" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Складская позиция содержит другие детали" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Складская позиция была назначена покупателю" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Складская позиция в производстве" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index d43be9054c..737fdc1237 100644 --- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 74404b731a..b8b536dab3 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API vmesnik ni najden" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Uporabnik nima dovoljenja pogleda tega modela" @@ -486,7 +490,7 @@ msgstr "Mora biti veljavna številka" msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Nadrejena izgradnja" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Neobvezno" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Montaža" @@ -694,7 +698,7 @@ msgstr "Nalog izgradnje" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Izgradnja se ne ujema s nalogom izdelave" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Postavka zaloge" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktivno" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index 7667a2c143..624d3eb435 100644 --- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API krajnja tačka nije pronađena" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Lista nevalidiranih stavki" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Dati su neispravni filteri" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Korisnik nema dozvolu za pregled ovog modela" @@ -486,7 +490,7 @@ msgstr "Mora biti važeći broj" msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Roditeljski proizvod" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Uključi varijante" @@ -544,11 +548,11 @@ msgstr "Uključi varijante" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Uključi varijante" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Uključi varijante" msgid "Part" msgstr "Deo" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategorija" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Ne uključuj stablo" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Opciono" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Sklapanje" @@ -694,7 +698,7 @@ msgstr "Nalog za izradu" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Količina mora biti veća od nule" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Stavka zaliha" @@ -1122,8 +1126,8 @@ msgstr "Automatski alociraj serijske brojeve" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Sledeći serijski brojevi već postoje ili su neispravni" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Dozvoli varijante" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "BOM stavka" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Po narudžbini" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "U proizvodnji" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Spoljašnje zalihe" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Dostupne zalihe" @@ -1470,19 +1474,19 @@ msgstr "Prekoračeni nalog za izgradnju" msgid "Build order {bo} is now overdue" msgstr "Nalog za izgradnju {bo} je sada prekoračen" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "je link" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "je datoteka" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "Korisnik nema potrebne dozvole da bi izbrisao ove atačmente" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Korisnik nema dozvolu da izbriše ovaj atačment" @@ -1599,7 +1603,7 @@ msgstr "Ime ovog zahteva za izmenu stranice" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktivan" @@ -2665,8 +2669,8 @@ msgstr "Podrazumevano je da su delovi šabloni" msgid "Parts can be assembled from other components by default" msgstr "Podrazumevano je da se delovi mogu sastavljati od drugih komponenti" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Komponenta" @@ -2682,7 +2686,7 @@ msgstr "Može da se kupi" msgid "Parts are purchaseable by default" msgstr "Podrazumevano je da se delovi mogu kupiti" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Može da se proda" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "Dobavljač je aktivan" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Proizvođač" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Kompanija" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Link za adresne informacije (eksterni)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Deo proizvođača" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Izaberi proizvođača" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "Broj dela proizvođača" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Povezani delovi dobavljača moraju referencirati isti osnovni deo" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dobavljač" @@ -4028,7 +4032,7 @@ msgstr "Dobavljač" msgid "Select supplier" msgstr "Izaberi dobavljača" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Jedinica za držanje dobavljačevih zaliha" @@ -4120,7 +4124,7 @@ msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača" msgid "Company Name" msgstr "Naziv kompanije" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Na zalihama" @@ -4276,7 +4280,7 @@ msgstr "Originalni podaci vrste" msgid "Errors" msgstr "Greške" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Važeće" @@ -5153,11 +5157,11 @@ msgstr "Spoj stavke" msgid "Merge items with the same part, destination and target date into one line item" msgstr "Spoj stavke sa istim delom, odredištem i ciljanim datumom u jednu stavku porudžbine" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Interni broj dela" @@ -5417,43 +5421,43 @@ msgstr "Ne uključuj pod-kategorije pod specifičnom kategorijom" msgid "Has Results" msgstr "Ima rezultate" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "Je revizija" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "Ima revizije" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "Spisak materijala validan" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "Deo sklopa se može testirati" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "Deo komponente se može testirati" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "Koristi" @@ -5615,7 +5619,7 @@ msgstr "Ključne reči dela da bi se poboljšala vidljivost u rezultatima pretra msgid "Part category" msgstr "Kategorija dela" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interni broj dela" @@ -5656,7 +5660,7 @@ msgstr "Podrazumevani istek" msgid "Expiry time (in days) for stock items of this part" msgstr "Vreme isteka (u danima) za stavke sa zaliha ovog dela" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimalne zalihe" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "Broj delova koji koriste ovaj šablon" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Originalni deo" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Izaberi originalni deo za duplikaciju" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kopiraj sliku" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Kopiraj sliku sa originalnog dela" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Kopiraj spisak materijala" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Kopiraj spisak materijala sa originalnog dela" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Kopiraj parametre" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Kopiraj parametarske podatke sa originalnog dela" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Kopiraj beleške" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Kopiraj beleške sa originalnog dela" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Inicijalna količina zaliha" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Odredi inicijalnu količinu zaliha za ovaj deo. Ukoliko je količina nula, neće biti dodate zalihe." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Inicijalna lokacija zaliha" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Broj dela proizvođača" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "Izabrana kompanija nije validan dobavljač" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "Izabrana kompanija nije validan proizvođač" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Deo proizvođača koji se poklapa sa ovim brojem dela proizvođača već postoji" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Deo dobavljača koji se opklapa sa ovim brojem dela dobavljača već postoji" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Naziv kategorije" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Izrađivanje" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stavke sa zaliha" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "Revizije" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Dobavljači" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Ukupne zalihe" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "Nealocirane zalihe" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "Varijante zaliha" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Dupliraj deo" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Kopiraj inicijalne podatke od drugog dela" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Početne zalihe" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Kreiraj deo sa početnom količinom zaliha" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Informacije o dobavljaču" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Kopiraj parametre kategorije" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Postojeća slika" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Ime fajla postojeće slike dela" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Fajl sa slikom ne postoji" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Validiraj ceo spisak materijala" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Može se izgraditi" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Minimalna cena" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Izmeni izračunatu vrednost za minimalnu cenu" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Minimalna valuta cene" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Maksimalna cena" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Izmeni izračunatu vrednost maksimalne cene" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Maksimalna valuta cene" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Ažuriraj" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Ažuriraj cene za ovaj deo" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nija moguća konverzija iz dostavljen valute u {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Minimalna cena ne sme biti veća od maksimalne cene" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Maksimalna cena ne sme biti manja od minimalne cene" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "Izaberi nadređeni sklop" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "Izaberi komponentu dela" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Izaberi deo sa kog će se kopirati spisak materijala" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Ukloni postojeće podatke" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Uključi nasleđeno" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Uključi stavke sa spiska materijala koje su nasleđene od šablonskih delova" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Preskoči nevažeće vrste" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Kopiraj zamenske delove" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Instalirano" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "Plugin ne može biti obrisan jer je trenutno aktivan" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Nema određene akcije" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Nema poklapajuće akcije" @@ -7458,7 +7462,7 @@ msgstr "Paket plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Nije pronađen autor" @@ -8053,135 +8057,135 @@ msgstr "Nadređena lokacija" msgid "Filter by parent location" msgstr "Filtriraj po nadređenoj lokaciji" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "Ime dela" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "Ime dela sadrži" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "Ime dela (regex)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "Interni deo broja" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "Interni deo broja sadrži (osetljivo na velika i mala slova)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "Interni broj dela (regex)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "Minimalne zalihe" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "Maksimalne zalihe" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Statusni kod" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Eksterna lokacija" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "Potrošeno od strane naloga za izradu" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "Instalirano u drugu stavku sa zaliha" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Stablo dela" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "Ažurirano pre" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "Ažurirano nakon" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "Popis pre" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "Popis nakon" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Datum isteka pre" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Datum isteka nakon" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Zastarelo" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Količina je neophodna" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Validan deo mora biti dosavljen" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Dati dobavljač ne postoji" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Deo dobavljača ima definisanu veličinu pakovanja, ali fleg use_pack_size nije postavljen" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serijski brojevi ne mogu biti dostavljeni za deo koji nije moguće pratiti" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Konvertovano u deo" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Deo nije postavljen kao deo koji je moguće pratiti" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Količina mora biti ceo broj" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "Serijski brojevi moraju biti dostavljeni kao lista" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Količine se ne poklapaju sa serijskim brojevima" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "Test šablon ne postoji" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Stavka sa zaliha je dodeljena nalogu za prodaju" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Stavka sa zaliha je instalirana u drugu stavku" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Stavka sa zaliha sadrži druge stavke" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Stavka sa zaliha je dodeljena mušteriji" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Stavka sa zaliha je trenutno u produkciji" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Serijalizovane zalihe se ne mogu spojiti" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Dupliraj stavke sa zaliha" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Stavke sa zaliha se moraju odnositi na isti deo" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Stavke sa zaliha se moraju odnositi na isti deo dobavljača" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Statusne šifre zaliha moraju da se poklapaju" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index c498077d1f..d311b7efe3 100644 --- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Du måste aktivera tvåfaktorsautentisering innan du kan göra något annat." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Användaren har inte behörighet att se denna modell" @@ -486,7 +490,7 @@ msgstr "Måste vara ett giltigt nummer" msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Föregående tillverkning" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategori" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Valfri" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "Byggorder" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Byggutgång matchar inte bygg order" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Artikel i lager" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Är länk" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Är fil" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiv" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Tillverkare" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Företag" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverantör" @@ -4028,7 +4032,7 @@ msgstr "Leverantör" msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "Företagsnamn" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "I lager" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Kopiera bild" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Kategorinamn" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Leverantörer" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Ingen åtgärd specificerad" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Ingen matchande åtgärd hittades" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Statuskod" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index c9146e6eb4..90ec9e7720 100644 --- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "ไม่พบ API endpoint" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "" @@ -486,7 +490,7 @@ msgstr "ต้องเป็นตัวเลข" msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index b4e7c0090f..5ed837c592 100644 --- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Başka bir şey yapmadan önce iki faktörlü kimlik doğrulamayı etkinleştirme gerekir." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Toplu işlem için öge veya filtre listesi sağlanmalıdır" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Ögeler bir liste olarak sağlanmalıdır" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Geçersiz ögeler listesi sağlandı" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Filtreler bir sözlük olarak sağlanmalıdır" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Geçersiz filtreler sağlandı" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "Tüm filtre yalnızca true ile kullanılmalıdır" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Sağlanan ölçüte uygun bir eşleşme yok" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Kullanıcının bu modeli görüntüleme izni yok" @@ -486,7 +490,7 @@ msgstr "Geçerli bir numara olmalı" msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Var olan seçeneklerden bir döviz birimi seçin" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Üst Yapım İşi" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "Varyantları Dahil Et" @@ -544,11 +548,11 @@ msgstr "Varyantları Dahil Et" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "Varyantları Dahil Et" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "Varyantları Dahil Et" msgid "Part" msgstr "Parça" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Kategori" @@ -634,7 +638,7 @@ msgstr "En yakın tarih" msgid "Max Date" msgstr "Maksimum Tarih" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "Ağacı Hariç Tut" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "İsteğe Bağlı" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Montaj" @@ -694,7 +698,7 @@ msgstr "Yapım İşi Emri" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Miktar sıfırdan büyük olmalıdır" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Stok Kalemi" @@ -1122,8 +1126,8 @@ msgstr "Seri Numaralarını Otomatik Ayır" msgid "Automatically allocate required items with matching serial numbers" msgstr "Gerekli ögeleri eşleşen seri numaralarıyla otomatik ayır" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Şu seri numaraları zaten varlar veya geçersizler" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Çeşide İzin Ver" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "ML Ögesi" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Siparişte" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "Üretimde" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Harici Stok" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Mevcut Stok" @@ -1470,19 +1474,19 @@ msgstr "Gecikmiş Yapım Siparişi" msgid "Build order {bo} is now overdue" msgstr "{bo} yapım siparişi şimdi gecikti" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Link Olanlar" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "Dosya Olanlar" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "Kullanıcının bu ekleri silmek için izni yok" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Kullanıcının bu eki silmek için izni yok" @@ -1599,7 +1603,7 @@ msgstr "Bu web kancası için ad" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktif" @@ -2665,8 +2669,8 @@ msgstr "Parçaları varsayılan olan şablondur" msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Bileşen" @@ -2682,7 +2686,7 @@ msgstr "Satın Alınabilir" msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Satılabilir" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Üretici" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Şirket" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Üretici seçin" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "ÜPN" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tedarikçi" @@ -4028,7 +4032,7 @@ msgstr "Tedarikçi" msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "DPN" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Minimum Stok" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stok Kalemleri" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "İşlem belirtilmedi" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Eşleşen eylem bulunamadı" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index 760fafa1a6..2eac1e31ce 100644 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "Необхідно увімкнути двофакторну автентифікацію, перед тим як робити будь-що інше." -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "Кінцева точка API не знайдена" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "Для масових операцій необхідно надати перелік сутностей або фільтрів" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "Сутності необхідно надати списком" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "Надано неправильний список сутностей" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "Фільтри необхідно надавати у вигляді словника" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "Надано неправильні фільтри" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "Немає сутностей що відповідають наданим критеріям" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "У користувача немає дозволу на перегляд цієї моделі" @@ -165,19 +169,19 @@ msgstr "" #: InvenTree/helpers.py:857 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "Видаліть HTML тег з цього значення" #: InvenTree/helpers.py:936 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "Дані містять заборонений вміст у форматі Markdown" #: InvenTree/helpers_model.py:132 msgid "Connection error" -msgstr "" +msgstr "Помилка підключення" #: InvenTree/helpers_model.py:137 InvenTree/helpers_model.py:144 msgid "Server responded with invalid status code" -msgstr "" +msgstr "Сервер відправив некоректний код статусу" #: InvenTree/helpers_model.py:140 msgid "Exception occurred" @@ -185,19 +189,19 @@ msgstr "Відбулося виключення" #: InvenTree/helpers_model.py:150 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "Сервер повернув невірне значення Content-Length" #: InvenTree/helpers_model.py:153 msgid "Image size is too large" -msgstr "" +msgstr "Розмір зображення занадто великий" #: InvenTree/helpers_model.py:165 msgid "Image download exceeded maximum size" -msgstr "" +msgstr "Розмір зображення перевищує максимально дозволений розмір" #: InvenTree/helpers_model.py:170 msgid "Remote server returned empty response" -msgstr "" +msgstr "Віддалений сервер повернув пусту відповідь" #: InvenTree/helpers_model.py:178 msgid "Supplied URL is not a valid image file" @@ -357,11 +361,11 @@ msgstr "Китайська (Традиційна)" #: InvenTree/magic_login.py:31 msgid "Log in to the app" -msgstr "" +msgstr "Авторизуватися в додатку" #: InvenTree/magic_login.py:41 company/models.py:170 users/serializers.py:190 msgid "Email" -msgstr "" +msgstr "Електронна пошта" #: InvenTree/models.py:109 msgid "Error running plugin validation" @@ -486,7 +490,7 @@ msgstr "" msgid "Currency" msgstr "" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Збірка" @@ -694,7 +698,7 @@ msgstr "" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "" @@ -1122,8 +1126,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Дозволити варіанти" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "У виробництві" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "" @@ -1470,19 +1474,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1599,7 +1603,7 @@ msgstr "" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" @@ -2665,8 +2669,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Компонент" @@ -2682,7 +2686,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Доступний для продажу" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Виробник" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Позиція виробника" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" @@ -4028,7 +4032,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "" @@ -4120,7 +4124,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "В наявності" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Дійсно" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Мінімальний запас" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Виробничий номер позиції" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Початковий запас" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Наявне зображення" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Мінімальна ціна" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Максимальна ціна" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 519f7f4567..906b0b0bbf 100644 --- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/src/backend/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: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "API endpoint không tồn tại" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "Không có dữ liệu được cung cấp" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "Người dùng không được phân quyền xem mẫu này" @@ -486,7 +490,7 @@ msgstr "Phải là một số hợp lệ" msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "Phiên bản cha" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "" @@ -544,11 +548,11 @@ msgstr "" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "" msgid "Part" msgstr "Nguyên liệu" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "Danh mục" @@ -634,7 +638,7 @@ msgstr "" msgid "Max Date" msgstr "" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "Tuỳ chọn" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "Lắp ráp" @@ -694,7 +698,7 @@ msgstr "Tạo đơn hàng" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "Đầu ra bản dựng không phù hợp với đơn đặt bản dựng #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" @@ -1036,7 +1040,7 @@ msgstr "" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "Kho hàng" @@ -1122,8 +1126,8 @@ msgstr "Số sêri tự cấp" msgid "Automatically allocate required items with matching serial numbers" msgstr "Tự động cấp số seri phù hợp cho hàng hóa được yêu cầu" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "Cho phép biến thể" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "Mục BOM" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "Bật đơn hàng" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "Kho ngoài" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "Số hàng tồn" @@ -1470,19 +1474,19 @@ msgstr "Đơn đặt bản dựng quá hạn" msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "Đường dẫn" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "File" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "Không có quyền xoá file đính kèm" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "Không có quyền xoá file đính kèm" @@ -1599,7 +1603,7 @@ msgstr "Tên của webhook này" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Hoạt động" @@ -2665,8 +2669,8 @@ msgstr "Sản phẩm là mẫu bởi mặc định" msgid "Parts can be assembled from other components by default" msgstr "Sản phẩm có thể lắp giáp từ thành phần khác theo mặc định" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "Thành phần" @@ -2682,7 +2686,7 @@ msgstr "Có thể mua" msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "Có thể bán" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "Nhà sản xuất" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "Doanh nghiêp" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "Liên kết thông tin địa chỉ (bên ngoài)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu với sản phẩm cơ bản tương tự" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Nhà cung cấp" @@ -4028,7 +4032,7 @@ msgstr "Nhà cung cấp" msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" @@ -4120,7 +4124,7 @@ msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" msgid "Company Name" msgstr "" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "Còn hàng" @@ -4276,7 +4280,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "Hợp lệ" @@ -5153,11 +5157,11 @@ msgstr "" msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" @@ -5417,43 +5421,43 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "" @@ -5615,7 +5619,7 @@ msgstr "Từ khóa sản phẩm để cải thiện sự hiện diện trong k msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5656,7 +5660,7 @@ msgstr "Hết hạn mặc định" msgid "Expiry time (in days) for stock items of this part" msgstr "Thời gian hết hạn (theo ngày) để nhập kho hàng hóa cho sản phẩm này" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "Kho tối thiểu" @@ -6264,295 +6268,295 @@ msgstr "" msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "Sao chép định mức nguyên vật liệu từ sản phẩm gốc" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "Sao chép thông số" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "Sao chép thông tin tham số từ sản phẩm gốc" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Chỉ ra số lượng tồn kho ban đầu cho sản phẩm. Nếu điền là không, không thêm kho nào." -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "Chỉ định vị trí kho ban đầu cho sản phẩm này" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "Chọn nhà sản xuất (hoặc để trống để bỏ qua)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "Công ty đã chọn không phải là nhà cung ứng hợp lệ" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "Công ty đã chọn không phải là nhà sản xuất hợp lệ" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "Mã số nhà sản xuất khớp với MPN này đã tồn tại" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "Mã số nhà cung cấp khớp với SKU này đã tồn tại" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "Tên danh mục" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "Đang dựng" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Hàng trong kho" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "Nhà cung cấp" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Tổng số lượng" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "Sao chép dữ liệu ban đầu từ sản phẩm khác" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "Tạo sản phẩm với số lượng tồn kho ban đầu" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "Thêm thông tin nhà cung cấp ban đầu cho sản phẩm này" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "Sao chép mẫu tham số từ nhóm sản phẩm được chọn" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "Tên tệp của ảnh sản phẩm hiện hữu" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "Có thể dựng" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Không thể chuyển đổi từ tiền tệ đã cung cấp cho {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "Giá tối thiểu không được lớn hơn giá tối đa" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "Giá tối đa không được nhỏ hơn giá tối thiểu" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "Chọn sản phẩm để sao chép định mức nguyên vật liệu" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "Xóa mục BOM đã tồn tại trước khi sao chép" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "Bao gồm mục BOM được thừa hưởng từ sản phẩm mẫu" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "Bật tùy chọn này để bỏ qua dòng không hợp lệ" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM" @@ -6595,31 +6599,31 @@ msgstr "" msgid "{days_until_expiry} days" msgstr "" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "Đã cài đặt" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "Chưa chỉ ra hành động cụ thể" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "Không tìm thấy chức năng phù hợp" @@ -7458,7 +7462,7 @@ msgstr "" msgid "Plugin" msgstr "Phần bổ sung" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "Không tìm thấy tác giả" @@ -8053,135 +8057,135 @@ msgstr "" msgid "Filter by parent location" msgstr "" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "Mã trạng thái" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "Địa điểm bên ngoài" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "Cây sản phẩm" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "Ngày hết hạn trước đó" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "Ế" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "Bắt buộc nhập số lượng" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "Phải cung cấp sản phẩm hợp lệ" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "Sản phẩm nhà cung cấp đã đưa không tồn tại" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Sản phẩm nhà cung cấp có kích thước đóng gói được định nghĩa nhưng cờ use_pack_size chưa được thiết lập" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Số sê-ri không thê được cung cấp cho sản phẩm không thể theo dõi" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "Đã chuyển đổi sang sản phẩm" msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "Chưa đặt sản phẩm thành có thể theo dõi" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "Số lượng phải là số nguyên" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Số lượng không thể vượt quá số lượng trong kho đang có ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "Số lượng không khớp với số sêri" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "Hàng trong kho đã được gán vào đơn hàng bán" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "Hàng trong kho đã được cài đặt vào hàng hóa khác" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "Hàng trong kho chứa hàng hóa khác" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "Hàng trong kho đã được gắn với một khách hàng" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "Hàng trong kho hiện đang sản xuất" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "Mặt hàng phải tham chiếu đến sản phẩm tương tự" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "Mặt hàng phải tham chiếu đến sản phẩm nhà cung cấp tương tự" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "Mã trạng thái kho phải phù hợp" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index 6f9e188544..b0cb32b712 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "您必须启用双重身份验证才能进行后续操作。" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "批量操作必须提供物品或过滤器列表" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "必须以列表形式提供项目" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "提供了无效的单位" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "必须以字典形式提供筛选器" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "提供了无效的过滤器" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "所有过滤器只能使用true" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "没有符合所供条件的项目" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "未提供数据" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "用户没有权限查阅当前模型。" @@ -486,7 +490,7 @@ msgstr "必须是有效数字" msgid "Currency" msgstr "货币" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "从可用选项中选择货币" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "父级生产订单" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "包含变体" @@ -544,11 +548,11 @@ msgstr "包含变体" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "包含变体" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "类别" @@ -634,7 +638,7 @@ msgstr "最小日期" msgid "Max Date" msgstr "最大日期" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "排除树" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "可选项" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "装配件" @@ -694,7 +698,7 @@ msgstr "生产订单" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "产出与生产订单不匹配" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "数量必须大于零" @@ -965,7 +969,7 @@ msgstr "产出 {serial} 未通过所有必要测试" #: build/models.py:1229 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "存在已分配物料时无法部分完成生产输出" #: build/models.py:1627 msgid "Build Order Line Item" @@ -1036,7 +1040,7 @@ msgstr "已分配数量超过可用库存数量" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "库存项" @@ -1122,8 +1126,8 @@ msgstr "自动分配序列号" msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "允许变体" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "物料清单项" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "已订购" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "生产中" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "可用库存" @@ -1470,19 +1474,19 @@ msgstr "逾期的生产订单" msgid "Build order {bo} is now overdue" msgstr "生产订单 {bo} 现已逾期" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "是否链接" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "是否为文件" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "用户没有权限删除此附件" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "用户没有权限删除此附件" @@ -1599,7 +1603,7 @@ msgstr "此网络钩子的名称" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "激活" @@ -2665,8 +2669,8 @@ msgstr "零件默认为模板" msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "组件" @@ -2682,7 +2686,7 @@ msgstr "可购买" msgid "Parts are purchaseable by default" msgstr "默认情况下可购买零件" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "可销售" @@ -3411,11 +3415,11 @@ msgstr "启用测试站数据收集以获取测试结果" #: common/setting/system.py:1134 msgid "Enable Machine Ping" -msgstr "" +msgstr "启用设备状态检测" #: common/setting/system.py:1136 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "启用定期 Ping 检测,确认注册设备的运行状态" #: common/setting/user.py:23 msgid "Inline label display" @@ -3761,12 +3765,12 @@ msgid "Supplier is Active" msgstr "供应商已激活" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "制造商" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "公司" @@ -3952,7 +3956,7 @@ msgid "Link to address information (external)" msgstr "链接地址信息 (外部)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "制造商零件" @@ -3970,7 +3974,7 @@ msgid "Select manufacturer" msgstr "选择制造商" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "制造商零件编号" @@ -4019,10 +4023,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "链接的制造商零件必须引用相同的基础零件" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "供应商" @@ -4030,7 +4034,7 @@ msgstr "供应商" msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "供应商库存管理单位" @@ -4122,7 +4126,7 @@ msgstr "此供应商使用的默认货币" msgid "Company Name" msgstr "公司名称" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "有库存" @@ -4278,7 +4282,7 @@ msgstr "原始行数据" msgid "Errors" msgstr "错误" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "有效" @@ -4400,7 +4404,7 @@ msgstr "正在打印" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "警告" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4416,7 +4420,7 @@ msgstr "已断开连接" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "错误" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -5155,11 +5159,11 @@ msgstr "合并项目" msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "内部零件编号" @@ -5419,43 +5423,43 @@ msgstr "排除指定类别下的子类别" msgid "Has Results" msgstr "有结果" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "是变体" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "是修订版本" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "有修订版本" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "物料清单合规" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" -msgstr "" +msgstr "级联分类" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "如果为真,则包含给定分类下的所有子分类中的项目" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "按数字分类ID或字面值 \"null\" 进行筛选" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "装配部份是可测试的" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "组件部份是可测试的" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "使用" @@ -5617,7 +5621,7 @@ msgstr "提高搜索结果可见性的零件关键字" msgid "Part category" msgstr "零件类别" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "内部零件号 IPN" @@ -5658,7 +5662,7 @@ msgstr "默认到期" msgid "Expiry time (in days) for stock items of this part" msgstr "此零件库存项的过期时间 (天)" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "最低库存" @@ -6266,295 +6270,295 @@ msgstr "文件不是一个图片" msgid "Number of parts using this template" msgstr "使用此模板的零件数" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "选择要复制的原始零件" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "复制图片" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "从原零件复制图片" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "复制物料清单" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "从原始零件复制材料清单" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "复制参数" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "从原始零件复制参数数据" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "复制备注" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "从原始零件复制备注" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "复制测试" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "从原始零件复制测试模板" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "初始化库存数量" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "初始化库存地点" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的库存地点" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "选择供应商(或为空以跳过)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "选择制造商(或为空)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "制造商零件号" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "所选公司不是一个有效的供应商" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "所选公司不是一个有效的制造商" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "类别名称" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "正在生产" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "目前正在生产的零件数量" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件计划待产数量" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "库存项" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "修订" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "供应商" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "库存总量" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "未分配的库存" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "变体库存" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "重复零件" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "从另一个零件复制初始数据" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "初始库存" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "创建具有初始库存数量的零件" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "供应商信息" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供应商信息" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "从选择的零件复制参数模版" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "现有的图片" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "现有零件图片的文件名" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "图片不存在" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "验证整个物料清单" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "可以创建" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "生产订单必填项" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "分配到生产订单" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "销售订单必填项" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "分配到销售订单" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "最低价格" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "覆盖已计算的最低价格值" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "最低价格货币" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "最高价格" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "覆盖已计算的最高价格值" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "最高价格货币" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "更新" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "更新这个零件的价格" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "无法将所提供的货币转换为 {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "最低价格不能高于最高价格。" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "最高价格不能低于最低价格" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "选择父装配" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "选择零部件" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "选择要复制物料清单的零件" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "移除现有数据" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "复制前删除现有的物料清单项目" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "包含继承的" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "包含从模板零件继承的物料清单项目" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "跳过无效行" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "启用此选项以跳过无效行" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "复制替代品零件" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "复制物料清单项目时复制替代品零件" @@ -6597,31 +6601,31 @@ msgstr "今天到期" msgid "{days_until_expiry} days" msgstr "{days_until_expiry}天" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "内置" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "必填" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "示例" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "已安装" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "插件不能被删除,因为它当前处于激活状态" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "未指定操作" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "未找到指定操作" @@ -7460,7 +7464,7 @@ msgstr "软件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "未找到作者" @@ -8055,138 +8059,138 @@ msgstr "上级地点" msgid "Filter by parent location" msgstr "按上级位置筛选" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "零件名称 (不区分大小写)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "零件名称包含 (不区分大小写)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "零件名称 (正则表达式)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "内部零件号 (不区分大小写)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "内部零件号 (不区分大小写)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "内部零件号 (正则表达式)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "最低库存" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "最大库存" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "状态代码" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "外部地点" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "被生产订单消耗" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "安装于其他库存项中" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "零件树" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "更新时间早于" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "更新时间晚于" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "盘点时间早于" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "盘点时间晚于" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "过期日期前" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "过期日期后" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "过期" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "提供库存项的主键(PK)以排除该项及其所有子项" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "级联位置" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "若为真,则包含给定位置的所有子位置中的项目" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "按数字位置ID或字母“null”筛选" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "请先输入数量" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "必须提供有效的零件" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "给定的供应商零件不存在" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "供应商零件有定义的包装大小,但 use_pack_size 标志未设置" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "不能为不可跟踪的零件提供序列号" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" -msgstr "" +msgstr "包含已安装项" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "如果为真,则包含给定库存项下已安装组件的测试结果" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "按数字库存项ID进行筛选" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "ID 为 {id} 的库存项不存在" #: stock/models.py:72 msgid "Stock Location type" @@ -8374,68 +8378,68 @@ msgstr "转换为零件" msgid "Quantity exceeds available stock" msgstr "数量超过可用库存" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "零件未设置为可跟踪" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "数量必须是整数" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量不得超过现有库存量 ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "必须以列表形式提供序列号" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "数量不匹配序列号" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "测试模板不存在" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "库存项已分配到销售订单" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "库存项已安装在另一个项目中" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "库存项包含其他项目" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "库存项已分配给客户" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "库存项目前正在生产" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "序列化的库存不能合并" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "复制库存项" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "库存项必须指相同零件" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "库存项必须是同一供应商的零件" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "库存状态码必须匹配" @@ -8553,7 +8557,7 @@ msgstr "此结果的测试模板" #: stock/serializers.py:290 msgid "No matching test found for this part" -msgstr "" +msgstr "未找到适用于此零件的匹配测试" #: stock/serializers.py:294 msgid "Template ID or test name must be provided" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po index ade751bfdc..16e52abb02 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 11:01+0000\n" -"PO-Revision-Date: 2025-10-06 11:04\n" +"POT-Creation-Date: 2025-10-17 20:16+0000\n" +"PO-Revision-Date: 2025-10-17 20:19\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -21,43 +21,47 @@ msgstr "" msgid "You must enable two-factor authentication before doing anything else." msgstr "在進行任何其他操作前,必須先啟用雙因素驗證。" -#: InvenTree/api.py:357 +#: InvenTree/api.py:358 msgid "API endpoint not found" msgstr "未找到 API 端點" -#: InvenTree/api.py:434 +#: InvenTree/api.py:435 msgid "List of items or filters must be provided for bulk operation" msgstr "批次操作必須提供項目列表或篩選條件" -#: InvenTree/api.py:441 +#: InvenTree/api.py:442 msgid "Items must be provided as a list" msgstr "項目必須以列表形式提供" -#: InvenTree/api.py:449 +#: InvenTree/api.py:450 msgid "Invalid items list provided" msgstr "提供了無效的單位" -#: InvenTree/api.py:455 +#: InvenTree/api.py:456 msgid "Filters must be provided as a dict" msgstr "篩選條件必須以字典 (dict) 格式提供" -#: InvenTree/api.py:462 +#: InvenTree/api.py:463 msgid "Invalid filters provided" msgstr "提供了無效的過濾器" -#: InvenTree/api.py:467 +#: InvenTree/api.py:468 msgid "All filter must only be used with true" msgstr "all 篩選器只能在值為 true 時使用" -#: InvenTree/api.py:472 +#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "沒有項目符合所提供的條件" -#: InvenTree/api.py:494 +#: InvenTree/api.py:497 msgid "No data provided" msgstr "未提供資料" -#: InvenTree/api.py:744 +#: InvenTree/api.py:513 +msgid "This field must be unique." +msgstr "" + +#: InvenTree/api.py:775 msgid "User does not have permission to view this model" msgstr "用户沒有權限查閲當前模型。" @@ -486,7 +490,7 @@ msgstr "必須是有效的數字" msgid "Currency" msgstr "貨幣" -#: InvenTree/serializers.py:114 part/serializers.py:1356 +#: InvenTree/serializers.py:114 part/serializers.py:1357 msgid "Select currency from available options" msgstr "從可用選項中選擇貨幣" @@ -535,7 +539,7 @@ msgid "Parent Build" msgstr "上層生產工單" #: build/api.py:86 build/api.py:820 order/api.py:547 order/api.py:770 -#: order/api.py:1174 order/api.py:1420 stock/api.py:563 +#: order/api.py:1174 order/api.py:1420 stock/api.py:569 msgid "Include Variants" msgstr "包含變體" @@ -544,11 +548,11 @@ msgstr "包含變體" #: build/serializers.py:1456 company/models.py:1085 company/serializers.py:456 #: order/api.py:298 order/api.py:302 order/api.py:929 order/api.py:1187 #: order/api.py:1190 order/models.py:1886 order/models.py:2051 -#: order/models.py:2052 part/api.py:1234 part/api.py:1237 part/api.py:1303 -#: part/api.py:1584 part/models.py:472 part/models.py:3317 part/models.py:3460 +#: order/models.py:2052 part/api.py:1222 part/api.py:1225 part/api.py:1291 +#: part/api.py:1578 part/models.py:472 part/models.py:3317 part/models.py:3460 #: part/models.py:3518 part/models.py:3539 part/models.py:3561 #: part/models.py:3700 part/models.py:4067 part/models.py:4384 -#: part/models.py:4803 part/serializers.py:1881 +#: part/models.py:4803 part/serializers.py:1897 #: 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_report.html:109 @@ -557,7 +561,7 @@ msgstr "包含變體" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:576 stock/serializers.py:120 stock/serializers.py:172 +#: stock/api.py:582 stock/serializers.py:120 stock/serializers.py:172 #: stock/serializers.py:450 stock/serializers.py:629 stock/serializers.py:954 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 @@ -568,9 +572,9 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:122 build/api.py:125 part/api.py:985 part/api.py:1317 -#: part/api.py:1595 part/models.py:1092 part/models.py:3589 part/models.py:4183 -#: stock/api.py:859 +#: build/api.py:122 build/api.py:125 part/api.py:973 part/api.py:1305 +#: part/api.py:1589 part/models.py:1092 part/models.py:3589 part/models.py:4183 +#: stock/api.py:865 msgid "Category" msgstr "類別" @@ -634,7 +638,7 @@ msgstr "最小日期" msgid "Max Date" msgstr "最大日期" -#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:951 +#: build/api.py:299 build/api.py:302 part/api.py:215 stock/api.py:957 msgid "Exclude Tree" msgstr "排除樹" @@ -651,8 +655,8 @@ msgid "Optional" msgstr "非必須項目" #: build/api.py:457 build/serializers.py:1447 common/setting/system.py:457 -#: part/models.py:1223 part/serializers.py:1701 part/serializers.py:1710 -#: stock/api.py:629 +#: part/models.py:1223 part/serializers.py:1717 part/serializers.py:1726 +#: stock/api.py:635 msgid "Assembly" msgstr "裝配" @@ -694,7 +698,7 @@ msgstr "生產工單" #: build/serializers.py:499 build/serializers.py:569 build/serializers.py:1268 #: build/serializers.py:1272 order/api.py:1234 order/api.py:1239 #: order/serializers.py:768 order/serializers.py:908 order/serializers.py:2015 -#: stock/api.py:977 stock/serializers.py:111 stock/serializers.py:633 +#: stock/api.py:983 stock/serializers.py:111 stock/serializers.py:633 #: stock/serializers.py:738 stock/serializers.py:916 stock/serializers.py:1459 #: stock/serializers.py:1772 stock/serializers.py:1821 #: templates/email/stale_stock_notification.html:18 users/models.py:549 @@ -945,8 +949,8 @@ msgstr "產出與生產訂單不匹配" #: build/models.py:1136 build/models.py:1234 build/serializers.py:287 #: build/serializers.py:337 build/serializers.py:967 build/serializers.py:1751 #: order/models.py:710 order/serializers.py:604 order/serializers.py:779 -#: part/serializers.py:1695 stock/models.py:941 stock/models.py:1431 -#: stock/models.py:1880 stock/serializers.py:716 stock/serializers.py:1621 +#: part/serializers.py:1711 stock/models.py:941 stock/models.py:1431 +#: stock/models.py:1879 stock/serializers.py:716 stock/serializers.py:1621 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" @@ -1036,7 +1040,7 @@ msgstr "分配數量超過可用庫存" #: build/models.py:1964 build/serializers.py:950 build/serializers.py:1260 #: order/serializers.py:1500 order/serializers.py:1521 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1390 stock/models.py:457 stock/serializers.py:102 +#: stock/api.py:1396 stock/models.py:457 stock/serializers.py:102 #: stock/serializers.py:828 stock/serializers.py:1315 stock/serializers.py:1427 msgid "Stock Item" msgstr "庫存品項" @@ -1122,8 +1126,8 @@ msgstr "自動分配序號" msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1173 -#: stock/models.py:1903 +#: build/serializers.py:425 order/serializers.py:886 stock/api.py:1179 +#: stock/models.py:1902 msgid "The following serial numbers already exist or are invalid" msgstr "序號已存在或無效" @@ -1363,30 +1367,30 @@ msgid "Allow Variants" msgstr "允許變體" #: build/serializers.py:1431 build/serializers.py:1435 part/models.py:4229 -#: part/models.py:4795 stock/api.py:872 +#: part/models.py:4795 stock/api.py:878 msgid "BOM Item" msgstr "物料清單項" #: build/serializers.py:1479 company/serializers.py:448 -#: order/serializers.py:1253 part/serializers.py:952 part/serializers.py:1277 -#: part/serializers.py:1728 +#: order/serializers.py:1253 part/serializers.py:953 part/serializers.py:1278 +#: part/serializers.py:1744 msgid "On Order" msgstr "已訂購" -#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1281 -#: part/serializers.py:1732 +#: build/serializers.py:1480 order/serializers.py:1254 part/serializers.py:1282 +#: part/serializers.py:1748 msgid "In Production" msgstr "生產中" -#: build/serializers.py:1482 part/serializers.py:943 part/serializers.py:1285 +#: build/serializers.py:1482 part/serializers.py:944 part/serializers.py:1286 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1485 part/serializers.py:980 +#: build/serializers.py:1485 part/serializers.py:981 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1486 part/serializers.py:1271 part/serializers.py:1761 +#: build/serializers.py:1486 part/serializers.py:1272 part/serializers.py:1777 msgid "Available Stock" msgstr "可用庫存" @@ -1470,19 +1474,19 @@ msgstr "逾期的生產訂單" msgid "Build order {bo} is now overdue" msgstr "生產訂單 {bo} 現已逾期" -#: common/api.py:693 +#: common/api.py:694 msgid "Is Link" msgstr "是否鏈接" -#: common/api.py:701 +#: common/api.py:702 msgid "Is File" msgstr "是否為文件" -#: common/api.py:744 +#: common/api.py:745 msgid "User does not have permission to delete these attachments" msgstr "用户沒有權限刪除此附件" -#: common/api.py:761 +#: common/api.py:762 msgid "User does not have permission to delete this attachment" msgstr "用户沒有權限刪除此附件" @@ -1599,7 +1603,7 @@ msgstr "此網絡鈎子的名稱" #: common/models.py:1421 common/models.py:2247 common/models.py:2354 #: company/models.py:198 company/models.py:840 machine/models.py:39 -#: part/models.py:1258 plugin/models.py:69 stock/api.py:632 users/models.py:195 +#: part/models.py:1258 plugin/models.py:69 stock/api.py:638 users/models.py:195 #: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "激活" @@ -2665,8 +2669,8 @@ msgstr "零件默認為模板" msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1715 -#: part/serializers.py:1721 +#: common/setting/system.py:463 part/models.py:1229 part/serializers.py:1731 +#: part/serializers.py:1737 msgid "Component" msgstr "組件" @@ -2682,7 +2686,7 @@ msgstr "可購買" msgid "Parts are purchaseable by default" msgstr "默認情況下可購買零件" -#: common/setting/system.py:475 part/models.py:1253 stock/api.py:633 +#: common/setting/system.py:475 part/models.py:1253 stock/api.py:639 msgid "Salable" msgstr "可銷售" @@ -3759,12 +3763,12 @@ msgid "Supplier is Active" msgstr "供應商已激活" #: company/api.py:307 company/models.py:539 company/serializers.py:468 -#: part/serializers.py:575 +#: part/serializers.py:576 msgid "Manufacturer" msgstr "製造商" #: company/api.py:314 company/models.py:119 company/models.py:411 -#: stock/api.py:890 +#: stock/api.py:896 msgid "Company" msgstr "公司" @@ -3950,7 +3954,7 @@ msgid "Link to address information (external)" msgstr "鏈接地址信息 (外部)" #: company/models.py:511 company/models.py:628 company/models.py:850 -#: company/serializers.py:482 +#: company/serializers.py:482 stock/api.py:557 msgid "Manufacturer Part" msgstr "製造商零件" @@ -3968,7 +3972,7 @@ msgid "Select manufacturer" msgstr "選擇製造商" #: company/models.py:546 company/serializers.py:490 order/serializers.py:672 -#: part/serializers.py:585 +#: part/serializers.py:586 msgid "MPN" msgstr "製造商零件編號" @@ -4017,10 +4021,10 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "鏈接的製造商零件必須引用相同的基礎零件" #: company/models.py:828 company/serializers.py:460 company/serializers.py:478 -#: order/models.py:632 part/serializers.py:559 +#: order/models.py:632 part/serializers.py:560 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:557 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:563 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "供應商" @@ -4028,7 +4032,7 @@ msgstr "供應商" msgid "Select supplier" msgstr "選擇供應商" -#: company/models.py:835 part/serializers.py:570 +#: company/models.py:835 part/serializers.py:571 msgid "Supplier stock keeping unit" msgstr "供應商庫存管理單位" @@ -4120,7 +4124,7 @@ msgstr "此供應商使用的默認貨幣" msgid "Company Name" msgstr "公司名稱" -#: company/serializers.py:444 part/serializers.py:948 stock/serializers.py:467 +#: company/serializers.py:444 part/serializers.py:949 stock/serializers.py:467 msgid "In Stock" msgstr "有庫存" @@ -4276,7 +4280,7 @@ msgstr "原始行數據" msgid "Errors" msgstr "錯誤" -#: importer/models.py:550 part/serializers.py:1239 +#: importer/models.py:550 part/serializers.py:1240 msgid "Valid" msgstr "有效" @@ -5153,11 +5157,11 @@ msgstr "合併項目" msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:665 part/serializers.py:569 +#: order/serializers.py:665 part/serializers.py:570 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:679 part/models.py:1101 part/serializers.py:374 +#: order/serializers.py:679 part/models.py:1101 part/serializers.py:375 msgid "Internal Part Number" msgstr "內部零件編號" @@ -5417,43 +5421,43 @@ msgstr "排除指定類別下的子類別" msgid "Has Results" msgstr "有結果" -#: part/api.py:671 +#: part/api.py:659 msgid "Is Variant" msgstr "為變體" -#: part/api.py:679 +#: part/api.py:667 msgid "Is Revision" msgstr "是修訂版本" -#: part/api.py:689 +#: part/api.py:677 msgid "Has Revisions" msgstr "有修訂版本" -#: part/api.py:870 +#: part/api.py:858 msgid "BOM Valid" msgstr "物料清單合規" -#: part/api.py:979 +#: part/api.py:967 msgid "Cascade Categories" msgstr "" -#: part/api.py:980 +#: part/api.py:968 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:986 +#: part/api.py:974 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1528 +#: part/api.py:1522 msgid "Assembly part is testable" msgstr "裝配部份是可測試的" -#: part/api.py:1537 +#: part/api.py:1531 msgid "Component part is testable" msgstr "組件部份是可測試的" -#: part/api.py:1606 +#: part/api.py:1600 msgid "Uses" msgstr "使用" @@ -5615,7 +5619,7 @@ msgstr "提高搜索結果可見性的零件關鍵字" msgid "Part category" msgstr "零件類別" -#: part/models.py:1100 part/serializers.py:922 +#: part/models.py:1100 part/serializers.py:923 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "內部零件號 IPN" @@ -5656,7 +5660,7 @@ msgstr "默認到期" msgid "Expiry time (in days) for stock items of this part" msgstr "此零件庫存項的過期時間 (天)" -#: part/models.py:1207 part/serializers.py:996 +#: part/models.py:1207 part/serializers.py:997 msgid "Minimum Stock" msgstr "最低庫存" @@ -6264,295 +6268,295 @@ msgstr "檔案不是圖片" msgid "Number of parts using this template" msgstr "使用此模板的零件數" -#: part/serializers.py:480 +#: part/serializers.py:481 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:481 +#: part/serializers.py:482 msgid "Select original part to duplicate" msgstr "選擇要複製的原始零件" -#: part/serializers.py:486 +#: part/serializers.py:487 msgid "Copy Image" msgstr "複製圖片" -#: part/serializers.py:487 +#: part/serializers.py:488 msgid "Copy image from original part" msgstr "從原零件複製圖片" -#: part/serializers.py:493 +#: part/serializers.py:494 msgid "Copy BOM" msgstr "複製物料清單" -#: part/serializers.py:494 +#: part/serializers.py:495 msgid "Copy bill of materials from original part" msgstr "從原始零件複製材料清單" -#: part/serializers.py:500 +#: part/serializers.py:501 msgid "Copy Parameters" msgstr "複製參數" -#: part/serializers.py:501 +#: part/serializers.py:502 msgid "Copy parameter data from original part" msgstr "從原始零件複製參數數據" -#: part/serializers.py:507 +#: part/serializers.py:508 msgid "Copy Notes" msgstr "複製備註" -#: part/serializers.py:508 +#: part/serializers.py:509 msgid "Copy notes from original part" msgstr "從原始零件複製備註" -#: part/serializers.py:514 +#: part/serializers.py:515 msgid "Copy Tests" msgstr "複製測試模板" -#: part/serializers.py:515 +#: part/serializers.py:516 msgid "Copy test templates from original part" msgstr "從原始零件複製測試模板" -#: part/serializers.py:533 +#: part/serializers.py:534 msgid "Initial Stock Quantity" msgstr "初始化庫存數量" -#: part/serializers.py:535 +#: part/serializers.py:536 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。" -#: part/serializers.py:542 +#: part/serializers.py:543 msgid "Initial Stock Location" msgstr "初始化庫存地點" -#: part/serializers.py:543 +#: part/serializers.py:544 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的庫存地點" -#: part/serializers.py:560 +#: part/serializers.py:561 msgid "Select supplier (or leave blank to skip)" msgstr "選擇供應商(或為空以跳過)" -#: part/serializers.py:576 +#: part/serializers.py:577 msgid "Select manufacturer (or leave blank to skip)" msgstr "選擇製造商(或為空)" -#: part/serializers.py:586 +#: part/serializers.py:587 msgid "Manufacturer part number" msgstr "製造商零件號" -#: part/serializers.py:593 +#: part/serializers.py:594 msgid "Selected company is not a valid supplier" msgstr "所選公司不是一個有效的供應商" -#: part/serializers.py:602 +#: part/serializers.py:603 msgid "Selected company is not a valid manufacturer" msgstr "所選公司不是一個有效的製造商" -#: part/serializers.py:613 +#: part/serializers.py:614 msgid "Manufacturer part matching this MPN already exists" msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在" -#: part/serializers.py:620 +#: part/serializers.py:621 msgid "Supplier part matching this SKU already exists" msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在" -#: part/serializers.py:907 +#: part/serializers.py:908 msgid "Category Name" msgstr "類別名稱" -#: part/serializers.py:936 +#: part/serializers.py:937 msgid "Building" msgstr "正在生產" -#: part/serializers.py:937 +#: part/serializers.py:938 msgid "Quantity of this part currently being in production" msgstr "此零件目前生產中數量" -#: part/serializers.py:944 +#: part/serializers.py:945 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件排程待製造未完成數量" -#: part/serializers.py:964 stock/serializers.py:1047 stock/serializers.py:1218 +#: part/serializers.py:965 stock/serializers.py:1047 stock/serializers.py:1218 #: users/ruleset.py:30 msgid "Stock Items" msgstr "庫存項" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Revisions" msgstr "修訂" -#: part/serializers.py:972 +#: part/serializers.py:973 msgid "Suppliers" msgstr "供應商" -#: part/serializers.py:976 part/serializers.py:1268 +#: part/serializers.py:977 part/serializers.py:1269 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "庫存總量" -#: part/serializers.py:984 +#: part/serializers.py:985 msgid "Unallocated Stock" msgstr "未分配的庫存" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Variant Stock" msgstr "變體庫存" -#: part/serializers.py:1025 +#: part/serializers.py:1026 msgid "Duplicate Part" msgstr "重複零件" -#: part/serializers.py:1026 +#: part/serializers.py:1027 msgid "Copy initial data from another Part" msgstr "從另一個零件複製初始數據" -#: part/serializers.py:1032 +#: part/serializers.py:1033 msgid "Initial Stock" msgstr "初始庫存" -#: part/serializers.py:1033 +#: part/serializers.py:1034 msgid "Create Part with initial stock quantity" msgstr "創建具有初始庫存數量的零件" -#: part/serializers.py:1039 +#: part/serializers.py:1040 msgid "Supplier Information" msgstr "供應商信息" -#: part/serializers.py:1040 +#: part/serializers.py:1041 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供應商信息" -#: part/serializers.py:1048 +#: part/serializers.py:1049 msgid "Copy Category Parameters" msgstr "複製類別參數" -#: part/serializers.py:1049 +#: part/serializers.py:1050 msgid "Copy parameter templates from selected part category" msgstr "從選擇的零件複製參數模版" -#: part/serializers.py:1054 +#: part/serializers.py:1055 msgid "Existing Image" msgstr "現有的圖片" -#: part/serializers.py:1055 +#: part/serializers.py:1056 msgid "Filename of an existing part image" msgstr "現有零件圖片的文件名" -#: part/serializers.py:1072 +#: part/serializers.py:1073 msgid "Image file does not exist" msgstr "圖片不存在" -#: part/serializers.py:1240 +#: part/serializers.py:1241 msgid "Validate entire Bill of Materials" msgstr "驗證整個物料清單" -#: part/serializers.py:1274 part/serializers.py:1736 +#: part/serializers.py:1275 part/serializers.py:1752 msgid "Can Build" msgstr "可以創建" -#: part/serializers.py:1291 +#: part/serializers.py:1292 msgid "Required for Build Orders" msgstr "生產工單需求數" -#: part/serializers.py:1296 +#: part/serializers.py:1297 msgid "Allocated to Build Orders" msgstr "已分配至生產工單" -#: part/serializers.py:1303 +#: part/serializers.py:1304 msgid "Required for Sales Orders" msgstr "銷售訂單需求數" -#: part/serializers.py:1307 +#: part/serializers.py:1308 msgid "Allocated to Sales Orders" msgstr "已分配至銷售訂單" -#: part/serializers.py:1446 +#: part/serializers.py:1447 msgid "Minimum Price" msgstr "最低價格" -#: part/serializers.py:1447 +#: part/serializers.py:1448 msgid "Override calculated value for minimum price" msgstr "覆蓋已計算的最低價格值" -#: part/serializers.py:1454 +#: part/serializers.py:1455 msgid "Minimum price currency" msgstr "最低價格貨幣" -#: part/serializers.py:1461 +#: part/serializers.py:1462 msgid "Maximum Price" msgstr "最高價格" -#: part/serializers.py:1462 +#: part/serializers.py:1463 msgid "Override calculated value for maximum price" msgstr "覆蓋已計算的最高價格值" -#: part/serializers.py:1469 +#: part/serializers.py:1470 msgid "Maximum price currency" msgstr "最高價格貨幣" -#: part/serializers.py:1498 +#: part/serializers.py:1499 msgid "Update" msgstr "更新" -#: part/serializers.py:1499 +#: part/serializers.py:1500 msgid "Update pricing for this part" msgstr "更新這個零件的價格" -#: part/serializers.py:1522 +#: part/serializers.py:1523 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "無法將所提供的貨幣轉換為 {default_currency}" -#: part/serializers.py:1529 +#: part/serializers.py:1530 msgid "Minimum price must not be greater than maximum price" msgstr "最低價格不能高於最高價格。" -#: part/serializers.py:1532 +#: part/serializers.py:1533 msgid "Maximum price must not be less than minimum price" msgstr "最高價格不能低於最低價格" -#: part/serializers.py:1702 +#: part/serializers.py:1718 msgid "Select the parent assembly" msgstr "選擇父裝配" -#: part/serializers.py:1716 +#: part/serializers.py:1732 msgid "Select the component part" msgstr "選擇零部件" -#: part/serializers.py:1882 +#: part/serializers.py:1898 msgid "Select part to copy BOM from" msgstr "選擇要複製物料清單的零件" -#: part/serializers.py:1890 +#: part/serializers.py:1906 msgid "Remove Existing Data" msgstr "移除現有數據" -#: part/serializers.py:1891 +#: part/serializers.py:1907 msgid "Remove existing BOM items before copying" msgstr "複製前刪除現有的物料清單項目" -#: part/serializers.py:1896 +#: part/serializers.py:1912 msgid "Include Inherited" msgstr "包含繼承的" -#: part/serializers.py:1897 +#: part/serializers.py:1913 msgid "Include BOM items which are inherited from templated parts" msgstr "包含從模板零件繼承的物料清單項目" -#: part/serializers.py:1902 +#: part/serializers.py:1918 msgid "Skip Invalid Rows" msgstr "跳過無效行" -#: part/serializers.py:1903 +#: part/serializers.py:1919 msgid "Enable this option to skip invalid rows" msgstr "啓用此選項以跳過無效行" -#: part/serializers.py:1908 +#: part/serializers.py:1924 msgid "Copy Substitute Parts" msgstr "複製替代品零件" -#: part/serializers.py:1909 +#: part/serializers.py:1925 msgid "Copy substitute parts when duplicate BOM items" msgstr "複製物料清單項目時複製替代品零件" @@ -6595,31 +6599,31 @@ msgstr "今日到期" msgid "{days_until_expiry} days" msgstr "尚餘 {days_until_expiry} 天" -#: plugin/api.py:79 +#: plugin/api.py:80 msgid "Builtin" msgstr "內建" -#: plugin/api.py:93 +#: plugin/api.py:94 msgid "Mandatory" msgstr "必須" -#: plugin/api.py:108 +#: plugin/api.py:109 msgid "Sample" msgstr "範例" -#: plugin/api.py:122 plugin/models.py:167 +#: plugin/api.py:123 plugin/models.py:167 msgid "Installed" msgstr "已安裝" -#: plugin/api.py:189 +#: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" msgstr "插件不能被刪除,因為它當前處於激活狀態" -#: plugin/base/action/api.py:34 +#: plugin/base/action/api.py:56 msgid "No action specified" msgstr "未指定操作" -#: plugin/base/action/api.py:46 +#: plugin/base/action/api.py:70 msgid "No matching action found" msgstr "未找到指定操作" @@ -7458,7 +7462,7 @@ msgstr "軟件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:385 +#: plugin/plugin.py:386 msgid "No author found" msgstr "未找到作者" @@ -8053,135 +8057,135 @@ msgstr "上級地點" msgid "Filter by parent location" msgstr "按上級位置篩選" -#: stock/api.py:595 +#: stock/api.py:601 msgid "Part name (case insensitive)" msgstr "零件名稱(不分大小寫)" -#: stock/api.py:601 +#: stock/api.py:607 msgid "Part name contains (case insensitive)" msgstr "零件名稱包含(不分大小寫)" -#: stock/api.py:607 +#: stock/api.py:613 msgid "Part name (regex)" msgstr "零件名稱(正則)" -#: stock/api.py:612 +#: stock/api.py:618 msgid "Part IPN (case insensitive)" msgstr "零件 IPN(不分大小寫)" -#: stock/api.py:618 +#: stock/api.py:624 msgid "Part IPN contains (case insensitive)" msgstr "零件 IPN 包含(不分大小寫)" -#: stock/api.py:624 +#: stock/api.py:630 msgid "Part IPN (regex)" msgstr "零件 IPN(正則)" -#: stock/api.py:636 +#: stock/api.py:642 msgid "Minimum stock" msgstr "最小庫存" -#: stock/api.py:640 +#: stock/api.py:646 msgid "Maximum stock" msgstr "最大庫存" -#: stock/api.py:643 +#: stock/api.py:649 msgid "Status Code" msgstr "狀態代碼" -#: stock/api.py:683 +#: stock/api.py:689 msgid "External Location" msgstr "外部地點" -#: stock/api.py:782 +#: stock/api.py:788 msgid "Consumed by Build Order" msgstr "被生產工單消耗" -#: stock/api.py:792 +#: stock/api.py:798 msgid "Installed in other stock item" msgstr "已安裝於其他庫存項" -#: stock/api.py:881 +#: stock/api.py:887 msgid "Part Tree" msgstr "零件樹" -#: stock/api.py:903 +#: stock/api.py:909 msgid "Updated before" msgstr "更新時間早於" -#: stock/api.py:907 +#: stock/api.py:913 msgid "Updated after" msgstr "更新時間晚於" -#: stock/api.py:911 +#: stock/api.py:917 msgid "Stocktake Before" msgstr "盤點日期早於" -#: stock/api.py:915 +#: stock/api.py:921 msgid "Stocktake After" msgstr "盤點日期晚於" -#: stock/api.py:920 +#: stock/api.py:926 msgid "Expiry date before" msgstr "過期日期前" -#: stock/api.py:924 +#: stock/api.py:930 msgid "Expiry date after" msgstr "過期日期後" -#: stock/api.py:927 stock/serializers.py:659 +#: stock/api.py:933 stock/serializers.py:659 msgid "Stale" msgstr "過期" -#: stock/api.py:953 +#: stock/api.py:959 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:971 +#: stock/api.py:977 msgid "Cascade Locations" msgstr "" -#: stock/api.py:972 +#: stock/api.py:978 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:978 +#: stock/api.py:984 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1074 +#: stock/api.py:1080 msgid "Quantity is required" msgstr "請先輸入數量" -#: stock/api.py:1079 +#: stock/api.py:1085 msgid "Valid part must be supplied" msgstr "必須提供有效的零件" -#: stock/api.py:1110 +#: stock/api.py:1116 msgid "The given supplier part does not exist" msgstr "給定的供應商零件不存在" -#: stock/api.py:1120 +#: stock/api.py:1126 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "供應商零件有定義的包裝大小,但 use_pack_size 標誌未設置" -#: stock/api.py:1152 +#: stock/api.py:1158 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "不能為不可跟蹤的零件提供序列號" -#: stock/api.py:1382 +#: stock/api.py:1388 msgid "Include Installed" msgstr "" -#: stock/api.py:1384 +#: stock/api.py:1390 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1391 +#: stock/api.py:1397 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1412 +#: stock/api.py:1418 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" @@ -8372,68 +8376,68 @@ msgstr "轉換為零件" msgid "Quantity exceeds available stock" msgstr "數量超過可用庫存" -#: stock/models.py:1871 +#: stock/models.py:1870 msgid "Part is not set as trackable" msgstr "零件未設置為可跟蹤" -#: stock/models.py:1877 +#: stock/models.py:1876 msgid "Quantity must be integer" msgstr "數量必須是整數" -#: stock/models.py:1885 +#: stock/models.py:1884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "數量不得超過現有庫存量 ({self.quantity})" -#: stock/models.py:1891 +#: stock/models.py:1890 msgid "Serial numbers must be provided as a list" msgstr "序列號需以清單提供" -#: stock/models.py:1896 +#: stock/models.py:1895 msgid "Quantity does not match serial numbers" msgstr "數量不匹配序列號" -#: stock/models.py:2014 stock/models.py:2918 +#: stock/models.py:2013 stock/models.py:2918 msgid "Test template does not exist" msgstr "測試模板不存在" -#: stock/models.py:2032 +#: stock/models.py:2031 msgid "Stock item has been assigned to a sales order" msgstr "庫存項已分配到銷售訂單" -#: stock/models.py:2036 +#: stock/models.py:2035 msgid "Stock item is installed in another item" msgstr "庫存項已安裝在另一個項目中" -#: stock/models.py:2039 +#: stock/models.py:2038 msgid "Stock item contains other items" msgstr "庫存項包含其他項目" -#: stock/models.py:2042 +#: stock/models.py:2041 msgid "Stock item has been assigned to a customer" msgstr "庫存項已分配給客户" -#: stock/models.py:2045 stock/models.py:2229 +#: stock/models.py:2044 stock/models.py:2227 msgid "Stock item is currently in production" msgstr "庫存項目前正在生產" -#: stock/models.py:2048 +#: stock/models.py:2047 msgid "Serialized stock cannot be merged" msgstr "序列化的庫存不能合併" -#: stock/models.py:2055 stock/serializers.py:1503 +#: stock/models.py:2054 stock/serializers.py:1503 msgid "Duplicate stock items" msgstr "複製庫存項" -#: stock/models.py:2059 +#: stock/models.py:2058 msgid "Stock items must refer to the same part" msgstr "庫存項必須指相同零件" -#: stock/models.py:2067 +#: stock/models.py:2066 msgid "Stock items must refer to the same supplier part" msgstr "庫存項必須是同一供應商的零件" -#: stock/models.py:2072 +#: stock/models.py:2071 msgid "Stock status codes must match" msgstr "庫存狀態碼必須匹配" diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 9f66d47796..bf7814a08d 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -17,6 +17,7 @@ from rest_framework.response import Response import part.filters from data_exporter.mixins import DataExportViewMixin from InvenTree.api import ( + BulkCreateMixin, BulkDeleteMixin, BulkUpdateMixin, ListCreateDestroyAPIView, @@ -1416,7 +1417,11 @@ class PartParameterFilter(FilterSet): class PartParameterList( - PartParameterAPIMixin, OutputOptionsMixin, DataExportViewMixin, ListCreateAPI + BulkCreateMixin, + PartParameterAPIMixin, + OutputOptionsMixin, + DataExportViewMixin, + ListCreateAPI, ): """API endpoint for accessing a list of PartParameter objects. @@ -1444,6 +1449,8 @@ class PartParameterList( 'template__units', ] + unique_create_fields = ['part', 'template'] + class PartParameterDetail( PartParameterAPIMixin, OutputOptionsMixin, RetrieveUpdateDestroyAPI diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index 64ce7eedd0..ab6d5e7944 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -4271,6 +4271,11 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): for sub in self.substitutes.all(): parts.add(sub.part) + # Account for variants of the substitute part (if allowed) + if allow_variants and self.allow_variants: + for sub_variant in sub.part.get_descendants(include_self=False): + parts.add(sub_variant) + valid_parts = [] for p in parts: diff --git a/src/backend/InvenTree/part/test_param.py b/src/backend/InvenTree/part/test_param.py index af2c162d53..2891f5c839 100644 --- a/src/backend/InvenTree/part/test_param.py +++ b/src/backend/InvenTree/part/test_param.py @@ -364,6 +364,36 @@ class PartParameterTest(InvenTreeAPITestCase): self.assertEqual(len(response.data), 8) + def test_bulk_create_params(self): + """Test that we can bulk create parameters via the API.""" + url = reverse('api-part-parameter-list') + part4 = Part.objects.get(pk=4) + + data = [ + {'part': 4, 'template': 1, 'data': 70}, + {'part': 4, 'template': 2, 'data': 80}, + {'part': 4, 'template': 1, 'data': 80}, + ] + + # test that having non unique part/template combinations fails + res = self.post(url, data, expected_code=400) + self.assertEqual(len(res.data), 3) + self.assertEqual(len(res.data[1]), 0) + for err in [res.data[0], res.data[2]]: + self.assertEqual(len(err), 2) + self.assertEqual(str(err['part'][0]), 'This field must be unique.') + self.assertEqual(str(err['template'][0]), 'This field must be unique.') + self.assertEqual(PartParameter.objects.filter(part=part4).count(), 0) + + # Now, create a valid set of parameters + data = [ + {'part': 4, 'template': 1, 'data': 70}, + {'part': 4, 'template': 2, 'data': 80}, + ] + res = self.post(url, data, expected_code=201) + self.assertEqual(len(res.data), 2) + self.assertEqual(PartParameter.objects.filter(part=part4).count(), 2) + def test_param_detail(self): """Tests for the PartParameter detail endpoint.""" url = reverse('api-part-parameter-detail', kwargs={'pk': 5}) diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index 3e62ff606f..8585a37275 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -31,6 +31,7 @@ from InvenTree.mixins import ( from plugin.base.action.api import ActionPluginView from plugin.base.barcodes.api import barcode_api_urls from plugin.base.locate.api import LocatePluginView +from plugin.base.supplier.api import supplier_api_urls from plugin.base.ui.api import ui_plugins_api_urls from plugin.models import PluginConfig, PluginSetting, PluginUserSetting from plugin.plugin import InvenTreePlugin @@ -601,4 +602,5 @@ plugin_api_urls = [ path('', PluginList.as_view(), name='api-plugin-list'), ]), ), + path('supplier/', include(supplier_api_urls)), ] diff --git a/src/backend/InvenTree/plugin/base/supplier/__init__.py b/src/backend/InvenTree/plugin/base/supplier/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/backend/InvenTree/plugin/base/supplier/api.py b/src/backend/InvenTree/plugin/base/supplier/api.py new file mode 100644 index 0000000000..ec96e21e04 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/supplier/api.py @@ -0,0 +1,246 @@ +"""API views for supplier plugins in InvenTree.""" + +from typing import TYPE_CHECKING + +from django.db import transaction +from django.urls import path + +from drf_spectacular.utils import OpenApiParameter, extend_schema +from rest_framework import status +from rest_framework.exceptions import NotFound +from rest_framework.response import Response +from rest_framework.views import APIView + +from InvenTree import permissions +from part.models import PartCategoryParameterTemplate +from plugin import registry +from plugin.plugin import PluginMixinEnum + +from .serializers import ( + ImportRequestSerializer, + ImportResultSerializer, + SearchResultSerializer, + SupplierListSerializer, +) + +if TYPE_CHECKING: + from plugin.base.supplier.mixins import SupplierMixin +else: # pragma: no cover + + class SupplierMixin: + """Dummy class for type checking.""" + + +def get_supplier_plugin(plugin_slug: str, supplier_slug: str) -> SupplierMixin: + """Return the supplier plugin for the given plugin and supplier slugs.""" + supplier_plugin = None + for plugin in registry.with_mixin(PluginMixinEnum.SUPPLIER): + if plugin.slug == plugin_slug: + supplier_plugin = plugin + break + + if not supplier_plugin: + raise NotFound(detail=f"Plugin '{plugin_slug}' not found") + + if not any(s.slug == supplier_slug for s in supplier_plugin.get_suppliers()): + raise NotFound( + detail=f"Supplier '{supplier_slug}' not found for plugin '{plugin_slug}'" + ) + + return supplier_plugin + + +class ListSupplier(APIView): + """List all available supplier plugins. + + - GET: List supplier plugins + """ + + role_required = 'part.add' + permission_classes = [ + permissions.IsAuthenticatedOrReadScope, + permissions.RolePermission, + ] + serializer_class = SupplierListSerializer + + @extend_schema(responses={200: SupplierListSerializer(many=True)}) + def get(self, request): + """List all available supplier plugins.""" + suppliers = [] + for plugin in registry.with_mixin(PluginMixinEnum.SUPPLIER): + suppliers.extend([ + { + 'plugin_slug': plugin.slug, + 'supplier_slug': supplier.slug, + 'supplier_name': supplier.name, + } + for supplier in plugin.get_suppliers() + ]) + + return Response(suppliers) + + +class SearchPart(APIView): + """Search parts by supplier. + + - GET: Start part search + """ + + role_required = 'part.add' + permission_classes = [ + permissions.IsAuthenticatedOrReadScope, + permissions.RolePermission, + ] + serializer_class = SearchResultSerializer + + @extend_schema( + parameters=[ + OpenApiParameter(name='plugin', description='Plugin slug', required=True), + OpenApiParameter( + name='supplier', description='Supplier slug', required=True + ), + OpenApiParameter(name='term', description='Search term', required=True), + ], + responses={200: SearchResultSerializer(many=True)}, + ) + def get(self, request): + """Search parts by supplier.""" + plugin_slug = request.query_params.get('plugin', '') + supplier_slug = request.query_params.get('supplier', '') + term = request.query_params.get('term', '') + + supplier_plugin = get_supplier_plugin(plugin_slug, supplier_slug) + try: + results = supplier_plugin.get_search_results(supplier_slug, term) + except Exception as e: + return Response( + {'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) + + response = SearchResultSerializer(results, many=True).data + return Response(response) + + +class ImportPart(APIView): + """Import a part by supplier. + + - POST: Attempt to import part by sku + """ + + role_required = 'part.add' + permission_classes = [ + permissions.IsAuthenticatedOrReadScope, + permissions.RolePermission, + ] + serializer_class = ImportResultSerializer + + @extend_schema( + request=ImportRequestSerializer, responses={200: ImportResultSerializer} + ) + def post(self, request): + """Import a part by supplier.""" + serializer = ImportRequestSerializer(data=request.data) + if not serializer.is_valid(): + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + # Extract validated data + plugin_slug = serializer.validated_data.get('plugin', '') + supplier_slug = serializer.validated_data.get('supplier', '') + part_import_id = serializer.validated_data.get('part_import_id', '') + category = serializer.validated_data.get('category_id', None) + part = serializer.validated_data.get('part_id', None) + + supplier_plugin = get_supplier_plugin(plugin_slug, supplier_slug) + + # Validate part/category + if not part and not category: + return Response( + { + 'detail': "'category_id' is not provided, but required if no part_id is provided" + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + from plugin.base.supplier.mixins import supplier + + # Import part data + try: + import_data = supplier_plugin.get_import_data(supplier_slug, part_import_id) + + with transaction.atomic(): + # create part if it does not exist + if not part: + part = supplier_plugin.import_part( + import_data, category=category, creation_user=request.user + ) + + # create manufacturer part + manufacturer_part = supplier_plugin.import_manufacturer_part( + import_data, part=part + ) + + # create supplier part + supplier_part = supplier_plugin.import_supplier_part( + import_data, part=part, manufacturer_part=manufacturer_part + ) + + # set default supplier if not set + if not part.default_supplier: + part.default_supplier = supplier_part + part.save() + + # get pricing + pricing = supplier_plugin.get_pricing_data(import_data) + + # get parameters + parameters = supplier_plugin.get_parameters(import_data) + except supplier.PartNotFoundError: + return Response( + {'detail': f"Part with id: '{part_import_id}' not found"}, + status=status.HTTP_404_NOT_FOUND, + ) + except Exception as e: + return Response( + {'detail': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) + + # add default parameters for category + if category: + categories = category.get_ancestors(include_self=True) + category_parameters = PartCategoryParameterTemplate.objects.filter( + category__in=categories + ) + + for c in category_parameters: + for p in parameters: + if p.parameter_template == c.parameter_template: + p.on_category = True + p.value = p.value if p.value is not None else c.default_value + break + else: + parameters.append( + supplier.ImportParameter( + name=c.parameter_template.name, + value=c.default_value, + on_category=True, + parameter_template=c.parameter_template, + ) + ) + parameters.sort(key=lambda x: x.on_category, reverse=True) + + response = ImportResultSerializer({ + 'part_id': part.pk, + 'part_detail': part, + 'supplier_part_id': supplier_part.pk, + 'manufacturer_part_id': manufacturer_part.pk, + 'pricing': pricing, + 'parameters': parameters, + }).data + return Response(response) + + +supplier_api_urls = [ + path('list/', ListSupplier.as_view(), name='api-supplier-list'), + path('search/', SearchPart.as_view(), name='api-supplier-search'), + path('import/', ImportPart.as_view(), name='api-supplier-import'), +] diff --git a/src/backend/InvenTree/plugin/base/supplier/helpers.py b/src/backend/InvenTree/plugin/base/supplier/helpers.py new file mode 100644 index 0000000000..da4828fd91 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/supplier/helpers.py @@ -0,0 +1,88 @@ +"""Dataclasses for supplier plugins.""" + +from dataclasses import dataclass +from typing import Optional + +import part.models as part_models + + +@dataclass +class Supplier: + """Data class to represent a supplier. + + Note that one plugin can connect to multiple suppliers this way with e.g. different credentials. + + Attributes: + slug (str): A unique identifier for the supplier. + name (str): The human-readable name of the supplier. + """ + + slug: str + name: str + + +@dataclass +class SearchResult: + """Data class to represent a search result from a supplier. + + Attributes: + sku (str): The stock keeping unit identifier for the part. + name (str): The name of the part. + exact (bool): Indicates if the search result is an exact match. + description (Optional[str]): A brief description of the part. + price (Optional[str]): The price of the part as a string. + link (Optional[str]): A URL link to the part on the supplier's website. + image_url (Optional[str]): A URL to an image of the part. + id (Optional[str]): An optional identifier for the part (part_id), defaults to sku if not provided + existing_part (Optional[part_models.Part]): An existing part in the system that matches this search result, if any. + """ + + sku: str + name: str + exact: bool + description: Optional[str] = None + price: Optional[str] = None + link: Optional[str] = None + image_url: Optional[str] = None + id: Optional[str] = None + existing_part: Optional[part_models.Part] = None + + def __post_init__(self): + """Post-initialization to set the ID if not provided.""" + if not self.id: + self.id = self.sku + + +@dataclass +class ImportParameter: + """Data class to represent a parameter for a part during import. + + Attributes: + name (str): The name of the parameter. + value (str): The value of the parameter. + on_category (Optional[bool]): Indicates if the parameter is associated with a category. This will be automatically set by InvenTree + parameter_template (Optional[PartParameterTemplate]): The associated parameter template, if any. + """ + + name: str + value: str + on_category: Optional[bool] = False + parameter_template: Optional[part_models.PartParameterTemplate] = None + + def __post_init__(self): + """Post-initialization to fetch the parameter template if not provided.""" + if not self.parameter_template: + try: + self.parameter_template = part_models.PartParameterTemplate.objects.get( + name__iexact=self.name + ) + except part_models.PartParameterTemplate.DoesNotExist: + pass + + +class PartNotFoundError(Exception): + """Exception raised when a part is not found during import.""" + + +class PartImportError(Exception): + """Exception raised when an error occurs during part import.""" diff --git a/src/backend/InvenTree/plugin/base/supplier/mixins.py b/src/backend/InvenTree/plugin/base/supplier/mixins.py new file mode 100644 index 0000000000..6542989a64 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/supplier/mixins.py @@ -0,0 +1,177 @@ +"""Plugin mixin class for Supplier Integration.""" + +import io +from typing import Any, Generic, Optional, TypeVar + +import django.contrib.auth.models +from django.core.exceptions import ValidationError +from django.core.files.base import ContentFile + +import company.models +import part.models as part_models +from InvenTree.helpers_model import download_image_from_url +from plugin import PluginMixinEnum +from plugin.base.supplier import helpers as supplier +from plugin.mixins import SettingsMixin + +PartData = TypeVar('PartData') + + +class SupplierMixin(SettingsMixin, Generic[PartData]): + """Mixin which provides integration to specific suppliers.""" + + class MixinMeta: + """Meta options for this mixin.""" + + MIXIN_NAME = 'Supplier' + + def __init__(self): + """Register mixin.""" + super().__init__() + self.add_mixin(PluginMixinEnum.SUPPLIER, True, __class__) + + self.SETTINGS['SUPPLIER'] = { + 'name': 'Supplier', + 'description': 'The Supplier which this plugin integrates with.', + 'model': 'company.company', + 'model_filters': {'is_supplier': True}, + 'required': True, + } + + @property + def supplier_company(self): + """Return the supplier company object.""" + pk = self.get_setting('SUPPLIER', cache=True) + if not pk: + raise supplier.PartImportError('Supplier setting is missing.') + + return company.models.Company.objects.get(pk=pk) + + # --- Methods to be overridden by plugins --- + def get_suppliers(self) -> list[supplier.Supplier]: + """Return a list of available suppliers.""" + raise NotImplementedError('This method needs to be overridden.') + + def get_search_results( + self, supplier_slug: str, term: str + ) -> list[supplier.SearchResult]: + """Return a list of search results for the given search term.""" + raise NotImplementedError('This method needs to be overridden.') + + def get_import_data(self, supplier_slug: str, part_id: str) -> PartData: + """Return the import data for the given part ID.""" + raise NotImplementedError('This method needs to be overridden.') + + def get_pricing_data(self, data: PartData) -> dict[int, tuple[float, str]]: + """Return a dictionary of pricing data for the given part data.""" + raise NotImplementedError('This method needs to be overridden.') + + def get_parameters(self, data: PartData) -> list[supplier.ImportParameter]: + """Return a list of parameters for the given part data.""" + raise NotImplementedError('This method needs to be overridden.') + + def import_part( + self, + data: PartData, + *, + category: Optional[part_models.PartCategory], + creation_user: Optional[django.contrib.auth.models.User], + ) -> part_models.Part: + """Import a part using the provided data. + + This may include: + - Creating a new part + - Add an image to the part + - if this part has several variants, (create) a template part and assign it to the part + - create related parts + - add attachments to the part + """ + raise NotImplementedError('This method needs to be overridden.') + + def import_manufacturer_part( + self, data: PartData, *, part: part_models.Part + ) -> company.models.ManufacturerPart: + """Import a manufacturer part using the provided data. + + This may include: + - Creating a new manufacturer + - Creating a new manufacturer part + - Assigning the part to the manufacturer part + - Setting the default supplier for the part + - Adding parameters to the manufacturer part + - Adding attachments to the manufacturer part + """ + raise NotImplementedError('This method needs to be overridden.') + + def import_supplier_part( + self, + data: PartData, + *, + part: part_models.Part, + manufacturer_part: company.models.ManufacturerPart, + ) -> part_models.SupplierPart: + """Import a supplier part using the provided data. + + This may include: + - Creating a new supplier part + - Creating supplier price breaks + """ + raise NotImplementedError('This method needs to be overridden.') + + # --- Helper methods for importing parts --- + def download_image(self, img_url: str): + """Download an image from the given URL and return it as a ContentFile.""" + img_r = download_image_from_url(img_url) + fmt = img_r.format or 'PNG' + buffer = io.BytesIO() + img_r.save(buffer, format=fmt) + + return ContentFile(buffer.getvalue()), fmt + + def get_template_part( + self, other_variants: list[part_models.Part], template_kwargs: dict[str, Any] + ) -> part_models.Part: + """Helper function to handle variant parts. + + This helper function identifies all roots for the provided 'other_variants' list + - for no root => root part will be created using the 'template_kwargs' + - for one root + - root is a template => return it + - root is no template, create a new template like if there is no root + and assign it to only root that was found and return it + - for multiple roots => error raised + """ + root_set = {v.get_root() for v in other_variants} + + # check how much roots for the variant parts exist to identify the parent_part + parent_part = None # part that should be used as parent_part + root_part = None # part that was discovered as root part in root_set + if len(root_set) == 1: + root_part = next(iter(root_set)) + if root_part.is_template: + parent_part = root_part + + if len(root_set) == 0 or (root_part and not root_part.is_template): + parent_part = part_models.Part.objects.create(**template_kwargs) + + if not parent_part: + raise supplier.PartImportError( + f'A few variant parts from the supplier are already imported, but have different InvenTree variant root parts, try to merge them to the same root variant template part (parts: {", ".join(str(p.pk) for p in other_variants)}).' + ) + + # assign parent_part to root_part if root_part has no variant of already + if root_part and not root_part.is_template and not root_part.variant_of: + root_part.variant_of = parent_part # type: ignore + root_part.save() + + return parent_part + + def create_related_parts( + self, part: part_models.Part, related_parts: list[part_models.Part] + ): + """Create relationships between the given part and related parts.""" + for p in related_parts: + try: + part_models.PartRelated.objects.create(part_1=part, part_2=p) + except ValidationError: + pass # pass, duplicate relationship detected diff --git a/src/backend/InvenTree/plugin/base/supplier/serializers.py b/src/backend/InvenTree/plugin/base/supplier/serializers.py new file mode 100644 index 0000000000..75f728c1f9 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/supplier/serializers.py @@ -0,0 +1,115 @@ +"""Serializer definitions for the supplier plugin base.""" + +from typing import Any, Optional + +from rest_framework import serializers + +import part.models as part_models +from part.serializers import PartSerializer + + +class SupplierListSerializer(serializers.Serializer): + """Serializer for a supplier plugin.""" + + plugin_slug = serializers.CharField() + supplier_slug = serializers.CharField() + supplier_name = serializers.CharField() + + +class SearchResultSerializer(serializers.Serializer): + """Serializer for a search result.""" + + class Meta: + """Meta options for the SearchResultSerializer.""" + + fields = [ + 'id', + 'sku', + 'name', + 'exact', + 'description', + 'price', + 'link', + 'image_url', + 'existing_part_id', + ] + read_only_fields = fields + + id = serializers.CharField() + sku = serializers.CharField() + name = serializers.CharField() + exact = serializers.BooleanField() + description = serializers.CharField() + price = serializers.CharField() + link = serializers.CharField() + image_url = serializers.CharField() + existing_part_id = serializers.SerializerMethodField() + + def get_existing_part_id(self, value) -> Optional[int]: + """Return the ID of the existing part if available.""" + return getattr(value.existing_part, 'pk', None) + + +class ImportParameterSerializer(serializers.Serializer): + """Serializer for a ImportParameter.""" + + class Meta: + """Meta options for the ImportParameterSerializer.""" + + fields = ['name', 'value', 'parameter_template', 'on_category'] + + name = serializers.CharField() + value = serializers.CharField() + parameter_template = serializers.SerializerMethodField() + on_category = serializers.BooleanField() + + def get_parameter_template(self, value) -> Optional[int]: + """Return the ID of the parameter template if available.""" + return getattr(value.parameter_template, 'pk', None) + + +class ImportRequestSerializer(serializers.Serializer): + """Serializer for the import request.""" + + plugin = serializers.CharField(required=True) + supplier = serializers.CharField(required=True) + part_import_id = serializers.CharField(required=True) + category_id = serializers.PrimaryKeyRelatedField( + queryset=part_models.PartCategory.objects.all(), + many=False, + required=False, + allow_null=True, + ) + part_id = serializers.PrimaryKeyRelatedField( + queryset=part_models.Part.objects.all(), + many=False, + required=False, + allow_null=True, + ) + + +class ImportResultSerializer(serializers.Serializer): + """Serializer for the import result.""" + + class Meta: + """Meta options for the ImportResultSerializer.""" + + fields = [ + 'part_id', + 'part_detail', + 'manufacturer_part_id', + 'supplier_part_id', + 'pricing', + 'parameters', + ] + + part_id = serializers.IntegerField() + part_detail = PartSerializer() + manufacturer_part_id = serializers.IntegerField() + supplier_part_id = serializers.IntegerField() + pricing = serializers.SerializerMethodField() + parameters = ImportParameterSerializer(many=True) + + def get_pricing(self, value: Any) -> list[tuple[float, str]]: + """Return the pricing data as a dictionary.""" + return value['pricing'] diff --git a/src/backend/InvenTree/plugin/mixins/__init__.py b/src/backend/InvenTree/plugin/mixins/__init__.py index 0cd713294a..565e940bb9 100644 --- a/src/backend/InvenTree/plugin/mixins/__init__.py +++ b/src/backend/InvenTree/plugin/mixins/__init__.py @@ -20,6 +20,8 @@ from plugin.base.integration.ValidationMixin import ValidationMixin from plugin.base.label.mixins import LabelPrintingMixin from plugin.base.locate.mixins import LocateMixin from plugin.base.mail.mixins import MailMixin +from plugin.base.supplier import helpers as supplier +from plugin.base.supplier.mixins import SupplierMixin from plugin.base.ui.mixins import UserInterfaceMixin __all__ = [ @@ -41,8 +43,10 @@ __all__ = [ 'ScheduleMixin', 'SettingsMixin', 'SupplierBarcodeMixin', + 'SupplierMixin', 'TransitionMixin', 'UrlsMixin', 'UserInterfaceMixin', 'ValidationMixin', + 'supplier', ] diff --git a/src/backend/InvenTree/plugin/plugin.py b/src/backend/InvenTree/plugin/plugin.py index ec882fd691..10e9a698e4 100644 --- a/src/backend/InvenTree/plugin/plugin.py +++ b/src/backend/InvenTree/plugin/plugin.py @@ -75,6 +75,7 @@ class PluginMixinEnum(StringEnum): SCHEDULE = 'schedule' SETTINGS = 'settings' SETTINGS_CONTENT = 'settingscontent' + SUPPLIER = 'supplier' STATE_TRANSITION = 'statetransition' SUPPLIER_BARCODE = 'supplier-barcode' URLS = 'urls' diff --git a/src/backend/InvenTree/plugin/samples/supplier/__init__.py b/src/backend/InvenTree/plugin/samples/supplier/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py b/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py new file mode 100644 index 0000000000..9fe6d8ea00 --- /dev/null +++ b/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py @@ -0,0 +1,182 @@ +"""Sample supplier plugin.""" + +from company.models import Company, ManufacturerPart, SupplierPart, SupplierPriceBreak +from part.models import Part +from plugin.mixins import SupplierMixin, supplier +from plugin.plugin import InvenTreePlugin + + +class SampleSupplierPlugin(SupplierMixin, InvenTreePlugin): + """Example plugin to integrate with a dummy supplier.""" + + NAME = 'SampleSupplierPlugin' + SLUG = 'samplesupplier' + TITLE = 'My sample supplier plugin' + + VERSION = '0.0.1' + + def __init__(self): + """Initialize the sample supplier plugin.""" + super().__init__() + + self.sample_data = [] + for material in ['Steel', 'Aluminium', 'Brass']: + for size in ['M1', 'M2', 'M3', 'M4', 'M5']: + for length in range(5, 30, 5): + self.sample_data.append({ + 'material': material, + 'thread': size, + 'length': length, + 'sku': f'BOLT-{material}-{size}-{length}', + 'name': f'Bolt {size}x{length}mm {material}', + 'description': f'This is a sample part description demonstration purposes for the {size}x{length} {material} bolt.', + 'price': { + 1: [1.0, 'EUR'], + 10: [0.9, 'EUR'], + 100: [0.8, 'EUR'], + 5000: [0.5, 'EUR'], + }, + 'link': f'https://example.com/sample-part-{size}-{length}-{material}', + 'image_url': r'https://github.com/inventree/demo-dataset/blob/main/media/part_images/flat-head.png?raw=true', + 'brand': 'Bolt Manufacturer', + }) + + def get_suppliers(self) -> list[supplier.Supplier]: + """Return a list of available suppliers.""" + return [supplier.Supplier(slug='sample-fasteners', name='Sample Fasteners')] + + def get_search_results( + self, supplier_slug: str, term: str + ) -> list[supplier.SearchResult]: + """Return a list of search results based on the search term.""" + return [ + supplier.SearchResult( + sku=p['sku'], + name=p['name'], + description=p['description'], + exact=p['sku'] == term, + price=f'{p["price"][1][0]:.2f}€', + link=p['link'], + image_url=p['image_url'], + existing_part=getattr( + SupplierPart.objects.filter(SKU=p['sku']).first(), 'part', None + ), + ) + for p in self.sample_data + if all(t.lower() in p['name'].lower() for t in term.split()) + ] + + def get_import_data(self, supplier_slug: str, part_id: str): + """Return import data for a specific part ID.""" + for p in self.sample_data: + if p['sku'] == part_id: + p = p.copy() + p['variants'] = [ + x['sku'] + for x in self.sample_data + if x['thread'] == p['thread'] and x['length'] == p['length'] + ] + return p + + raise supplier.PartNotFoundError() + + def get_pricing_data(self, data) -> dict[int, tuple[float, str]]: + """Return pricing data for the given part data.""" + return data['price'] + + def get_parameters(self, data) -> list[supplier.ImportParameter]: + """Return a list of parameters for the given part data.""" + return [ + supplier.ImportParameter(name='Thread', value=data['thread'][1:]), + supplier.ImportParameter(name='Length', value=f'{data["length"]}mm'), + supplier.ImportParameter(name='Material', value=data['material']), + supplier.ImportParameter(name='Head', value='Flat Head'), + ] + + def import_part(self, data, **kwargs) -> Part: + """Import a part based on the provided data.""" + part, created = Part.objects.get_or_create( + name__iexact=data['sku'], + purchaseable=True, + defaults={ + 'name': data['sku'], + 'description': data['description'], + 'link': data['link'], + **kwargs, + }, + ) + + # If the part was created, set additional fields + if created: + if data['image_url']: + file, fmt = self.download_image(data['image_url']) + filename = f'part_{part.pk}_image.{fmt.lower()}' + part.image.save(filename, file) + + # link other variants if they exist in our inventree database + if len(data['variants']): + # search for other parts that may already have a template part associated + variant_parts = [ + x.part + for x in SupplierPart.objects.filter(SKU__in=data['variants']) + ] + parent_part = self.get_template_part( + variant_parts, + { + # we cannot extract a real name for the root part, but we can try to guess a unique name + 'name': data['sku'].replace(data['material'] + '-', ''), + 'description': data['name'].replace(' ' + data['material'], ''), + 'link': data['link'], + 'image': part.image.name, + 'is_template': True, + **kwargs, + }, + ) + + # after the template part was created, we need to refresh the part from the db because its tree id may have changed + # which results in an error if saved directly + part.refresh_from_db() + part.variant_of = parent_part # type: ignore + part.save() + + return part + + def import_manufacturer_part(self, data, **kwargs) -> ManufacturerPart: + """Import a manufacturer part based on the provided data.""" + mft, _ = Company.objects.get_or_create( + name__iexact=data['brand'], + defaults={ + 'is_manufacturer': True, + 'is_supplier': False, + 'name': data['brand'], + }, + ) + + mft_part, created = ManufacturerPart.objects.get_or_create( + MPN=f'MAN-{data["sku"]}', manufacturer=mft, **kwargs + ) + + if created: + # Attachments, notes, parameters and more can be added here + pass + + return mft_part + + def import_supplier_part(self, data, **kwargs) -> SupplierPart: + """Import a supplier part based on the provided data.""" + spp, _ = SupplierPart.objects.get_or_create( + SKU=data['sku'], + supplier=self.supplier_company, + **kwargs, + defaults={'link': data['link']}, + ) + + SupplierPriceBreak.objects.filter(part=spp).delete() + SupplierPriceBreak.objects.bulk_create([ + SupplierPriceBreak( + part=spp, quantity=quantity, price=price, price_currency=currency + ) + for quantity, (price, currency) in data['price'].items() + ]) + + return spp diff --git a/src/backend/InvenTree/plugin/samples/supplier/test_supplier_sample.py b/src/backend/InvenTree/plugin/samples/supplier/test_supplier_sample.py new file mode 100644 index 0000000000..22f86a05a5 --- /dev/null +++ b/src/backend/InvenTree/plugin/samples/supplier/test_supplier_sample.py @@ -0,0 +1,211 @@ +"""Unit tests for locate_sample sample plugins.""" + +from django.urls import reverse + +from company.models import ManufacturerPart, SupplierPart +from InvenTree.unit_test import InvenTreeAPITestCase +from part.models import ( + Part, + PartCategory, + PartCategoryParameterTemplate, + PartParameterTemplate, +) +from plugin import registry + + +class SampleSupplierTest(InvenTreeAPITestCase): + """Tests for SampleSupplierPlugin.""" + + fixtures = ['location', 'category', 'part', 'stock', 'company'] + roles = ['part.add'] + + def test_list(self): + """Check the list api.""" + # Test APIs + url = reverse('api-supplier-list') + + # No plugin + res = self.get(url, expected_code=200) + self.assertEqual(len(res.data), 0) + + # Activate plugin + config = registry.get_plugin('samplesupplier', active=None).plugin_config() + config.active = True + config.save() + + # One active plugin + res = self.get(url, expected_code=200) + self.assertEqual(len(res.data), 1) + self.assertEqual(res.data[0]['plugin_slug'], 'samplesupplier') + self.assertEqual(res.data[0]['supplier_slug'], 'sample-fasteners') + self.assertEqual(res.data[0]['supplier_name'], 'Sample Fasteners') + + def test_search(self): + """Check the search api.""" + # Activate plugin + config = registry.get_plugin('samplesupplier', active=None).plugin_config() + config.active = True + config.save() + + # Test APIs + url = reverse('api-supplier-search') + + # No plugin + self.get( + url, + {'plugin': 'non-existent-plugin', 'supplier': 'sample-fasteners'}, + expected_code=404, + ) + + # No supplier + self.get( + url, + {'plugin': 'samplesupplier', 'supplier': 'non-existent-supplier'}, + expected_code=404, + ) + + # valid supplier + res = self.get( + url, + {'plugin': 'samplesupplier', 'supplier': 'sample-fasteners', 'term': 'M5'}, + expected_code=200, + ) + self.assertEqual(len(res.data), 15) + self.assertEqual(res.data[0]['sku'], 'BOLT-Steel-M5-5') + + def test_import_part(self): + """Test importing a part by supplier.""" + # Activate plugin + plugin = registry.get_plugin('samplesupplier', active=None) + config = plugin.plugin_config() + config.active = True + config.save() + + # Test APIs + url = reverse('api-supplier-import') + + # No plugin + self.post( + url, + { + 'plugin': 'non-existent-plugin', + 'supplier': 'sample-fasteners', + 'part_import_id': 'BOLT-Steel-M5-5', + }, + expected_code=404, + ) + + # No supplier + self.post( + url, + { + 'plugin': 'samplesupplier', + 'supplier': 'non-existent-supplier', + 'part_import_id': 'BOLT-Steel-M5-5', + }, + expected_code=404, + ) + + # valid supplier, no part or category provided + self.post( + url, + { + 'plugin': 'samplesupplier', + 'supplier': 'sample-fasteners', + 'part_import_id': 'BOLT-Steel-M5-5', + }, + expected_code=400, + ) + + # valid supplier, but no supplier company set + self.post( + url, + { + 'plugin': 'samplesupplier', + 'supplier': 'sample-fasteners', + 'part_import_id': 'BOLT-Steel-M5-5', + 'category_id': 1, + }, + expected_code=500, + ) + + # Set the supplier company now + plugin.set_setting('SUPPLIER', 1) + + # valid supplier, valid part import + category = PartCategory.objects.get(pk=1) + p_len = PartParameterTemplate(name='Length', units='mm') + p_test = PartParameterTemplate(name='Test Parameter') + p_len.save() + p_test.save() + PartCategoryParameterTemplate.objects.bulk_create([ + PartCategoryParameterTemplate(category=category, parameter_template=p_len), + PartCategoryParameterTemplate( + category=category, parameter_template=p_test, default_value='Test Value' + ), + ]) + res = self.post( + url, + { + 'plugin': 'samplesupplier', + 'supplier': 'sample-fasteners', + 'part_import_id': 'BOLT-Steel-M5-5', + 'category_id': 1, + }, + expected_code=200, + ) + part = Part.objects.get(name='BOLT-Steel-M5-5') + self.assertIsNotNone(part) + self.assertEqual(part.pk, res.data['part_id']) + + self.assertIsNotNone(SupplierPart.objects.get(pk=res.data['supplier_part_id'])) + self.assertIsNotNone( + ManufacturerPart.objects.get(pk=res.data['manufacturer_part_id']) + ) + + self.assertSetEqual( + {x['name'] for x in res.data['parameters']}, + {'Thread', 'Length', 'Material', 'Head', 'Test Parameter'}, + ) + for p in res.data['parameters']: + if p['name'] == 'Length': + self.assertEqual(p['value'], '5mm') + self.assertEqual(p['parameter_template'], p_len.pk) + self.assertTrue(p['on_category']) + elif p['name'] == 'Test Parameter': + self.assertEqual(p['value'], 'Test Value') + self.assertEqual(p['parameter_template'], p_test.pk) + self.assertTrue(p['on_category']) + + # valid supplier, import only manufacturer and supplier part + part2 = Part.objects.create(name='Test Part', purchaseable=True) + res = self.post( + url, + { + 'plugin': 'samplesupplier', + 'supplier': 'sample-fasteners', + 'part_import_id': 'BOLT-Steel-M5-10', + 'part_id': part2.pk, + }, + expected_code=200, + ) + + self.assertEqual(part2.pk, res.data['part_id']) + sp = SupplierPart.objects.get(pk=res.data['supplier_part_id']) + mp = ManufacturerPart.objects.get(pk=res.data['manufacturer_part_id']) + self.assertIsNotNone(sp) + self.assertIsNotNone(mp) + self.assertEqual(sp.part.pk, part2.pk) + self.assertEqual(mp.part.pk, part2.pk) + + # PartNotFoundError + self.post( + url, + { + 'plugin': 'samplesupplier', + 'supplier': 'sample-fasteners', + 'part_import_id': 'non-existent-part', + 'category_id': 1, + }, + expected_code=404, + ) diff --git a/src/backend/InvenTree/report/templatetags/report.py b/src/backend/InvenTree/report/templatetags/report.py index 8126c8d7d5..837b3e7fef 100644 --- a/src/backend/InvenTree/report/templatetags/report.py +++ b/src/backend/InvenTree/report/templatetags/report.py @@ -103,7 +103,7 @@ def filter_db_model(model_name: str, **kwargs) -> Optional[QuerySet]: def getindex(container: list, index: int) -> Any: """Return the value contained at the specified index of the list. - This function is provideed to get around template rendering limitations. + This function is provided to get around template rendering limitations. Arguments: container: A python list object @@ -413,28 +413,54 @@ def internal_link(link, text) -> str: return mark_safe(f'{text}') -@register.simple_tag() -def add(x: float, y: float, *args, **kwargs) -> float: - """Add two numbers together.""" - return float(x) + float(y) +def destringify(value: Any) -> Any: + """Convert a string value into a float. + + - If the value is a string, attempt to convert it to a float. + - If conversion fails, return the original string. + - If the value is not a string, return it unchanged. + + The purpose of this function is to provide "seamless" math operations in templates, + where numeric values may be provided as strings, or converted to strings during template rendering. + """ + if isinstance(value, str): + value = value.strip() + try: + return float(value) + except ValueError: + return value + + return value @register.simple_tag() -def subtract(x: float, y: float) -> float: - """Subtract one number from another.""" - return float(x) - float(y) +def add(x: Any, y: Any) -> Any: + """Add two numbers (or number like values) together.""" + return destringify(x) + destringify(y) @register.simple_tag() -def multiply(x: float, y: float) -> float: - """Multiply two numbers together.""" - return float(x) * float(y) +def subtract(x: Any, y: Any) -> Any: + """Subtract one number (or number-like value) from another.""" + return destringify(x) - destringify(y) @register.simple_tag() -def divide(x: float, y: float) -> float: - """Divide one number by another.""" - return float(x) / float(y) +def multiply(x: Any, y: Any) -> Any: + """Multiply two numbers (or number-like values) together.""" + return destringify(x) * destringify(y) + + +@register.simple_tag() +def divide(x: Any, y: Any) -> Any: + """Divide one number (or number-like value) by another.""" + return destringify(x) / destringify(y) + + +@register.simple_tag() +def modulo(x: Any, y: Any) -> Any: + """Calculate the modulo of one number (or number-like value) by another.""" + return destringify(x) % destringify(y) @register.simple_tag diff --git a/src/backend/InvenTree/report/test_tags.py b/src/backend/InvenTree/report/test_tags.py index 3928124525..357be9def3 100644 --- a/src/backend/InvenTree/report/test_tags.py +++ b/src/backend/InvenTree/report/test_tags.py @@ -203,9 +203,58 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): self.assertEqual(report_tags.multiply('-2', 4), -8.0) self.assertEqual(report_tags.divide(100, 5), 20) + self.assertEqual(report_tags.modulo(10, 3), 1) + self.assertEqual(report_tags.modulo('10', '4'), 2) + with self.assertRaises(ZeroDivisionError): report_tags.divide(100, 0) + def test_maths_tags_with_strings(self): + """Tests for mathematical operator tags with string inputs.""" + self.assertEqual(report_tags.add('10', '20'), 30) + self.assertEqual(report_tags.subtract('50.5', '20.2'), 30.3) + self.assertEqual(report_tags.multiply(3.0000000000000, '7'), 21) + self.assertEqual(report_tags.divide('100.0', '4'), 25.0) + + def test_maths_tags_with_decimal(self): + """Tests for mathematical operator tags with Decimal inputs.""" + from decimal import Decimal + + self.assertEqual( + report_tags.add(Decimal('1.1'), Decimal('2.2')), Decimal('3.3') + ) + self.assertEqual( + report_tags.subtract(Decimal('5.5'), Decimal('2.2')), Decimal('3.3') + ) + self.assertEqual(report_tags.multiply(Decimal('3.0'), 4), Decimal('12.0')) + self.assertEqual( + report_tags.divide(Decimal('10.0'), Decimal('2.000')), Decimal('5.0') + ) + + def test_maths_tags_with_money(self): + """Tests for mathematical operator tags with Money inputs.""" + m1 = Money(100, 'USD') + m2 = Money(50, 'USD') + + self.assertEqual(report_tags.add(m1, m2), Money(150, 'USD')) + self.assertEqual(report_tags.subtract(m1, m2), Money(50, 'USD')) + self.assertEqual(report_tags.multiply(m2, 3), Money(150, 'USD')) + self.assertEqual(report_tags.divide(m1, '4'), Money(25, 'USD')) + + def test_maths_tags_invalid(self): + """Tests for mathematical operator tags with invalid inputs.""" + with self.assertRaises(TypeError): + report_tags.add('abc', 10) + + with self.assertRaises(TypeError): + report_tags.subtract(50, 'xyz') + + with self.assertRaises(TypeError): + report_tags.multiply('foo', 'bar') + + with self.assertRaises(TypeError): + report_tags.divide('100', 'baz') + def test_number_tags(self): """Simple tests for number formatting tags.""" fn = report_tags.format_number diff --git a/src/backend/requirements.in b/src/backend/requirements.in index f1a2ca9143..d06bc63897 100644 --- a/src/backend/requirements.in +++ b/src/backend/requirements.in @@ -6,7 +6,7 @@ django-anymail[amazon_ses,postal] # Email backend for various providers django-allauth[mfa,socialaccount,saml,openid] # SSO for external providers via OpenID django-cleanup # Automated deletion of old / unused uploaded files django-cors-headers # CORS headers extension for DRF -django-dbbackup # Backup / restore of database and media files +django-dbbackup>=5.0.0 # Backup / restore of database and media files django-error-report-2 # Error report viewer for the admin interface django-filter # Extended filtering options django-flags # Feature flags diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index 30180fc94f..2fb03ed3c0 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -438,9 +438,9 @@ django-cors-headers==4.9.0 \ --hash=sha256:15c7f20727f90044dcee2216a9fd7303741a864865f0c3657e28b7056f61b449 \ --hash=sha256:fe5d7cb59fdc2c8c646ce84b727ac2bca8912a247e6e68e1fb507372178e59e8 # via -r src/backend/requirements.in -django-dbbackup==4.3.0 \ - --hash=sha256:3549c8ccfdb167f20ca2c26eb0dfa55c79aa3f31ea4e4dbfa0816bc18ceec6dc \ - --hash=sha256:b4003b353d49d914ffbc033c793198426572d0a2b137ec795ddb2fb82225b960 +django-dbbackup==5.0.0 \ + --hash=sha256:a0301b14a4bb3c7243a2fde76d09f8f572f16cd7639f75f4cd42d898fc1b82a2 \ + --hash=sha256:aa9cc88e1413adfec0e547dd91e0afed6dbb91a02459697663a9b988dbc71f18 # via -r src/backend/requirements.in django-error-report-2==0.4.2 \ --hash=sha256:1dd99c497af09b7ea99f5fbaf910501838150a9d5390796ea00e187bc62f6c1b \ @@ -1295,10 +1295,6 @@ python3-saml==1.16.0 \ --hash=sha256:97c9669aecabc283c6e5fb4eb264f446b6e006f5267d01c9734f9d8bffdac133 \ --hash=sha256:c49097863c278ff669a337a96c46dc1f25d16307b4bb2679d2d1733cc4f5176a # via django-allauth -pytz==2025.2 \ - --hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \ - --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00 - # via django-dbbackup pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ diff --git a/src/frontend/lib/enums/ApiEndpoints.tsx b/src/frontend/lib/enums/ApiEndpoints.tsx index badd9e14c2..1ee2ba3806 100644 --- a/src/frontend/lib/enums/ApiEndpoints.tsx +++ b/src/frontend/lib/enums/ApiEndpoints.tsx @@ -220,6 +220,9 @@ export enum ApiEndpoints { // Special plugin endpoints plugin_locate_item = 'locate/', + plugin_supplier_list = 'supplier/list/', + plugin_supplier_search = 'supplier/search/', + plugin_supplier_import = 'supplier/import/', // Machine API endpoints machine_types_list = 'machine/types/', diff --git a/src/frontend/lib/types/Forms.tsx b/src/frontend/lib/types/Forms.tsx index 3393ec361a..364dc38e6f 100644 --- a/src/frontend/lib/types/Forms.tsx +++ b/src/frontend/lib/types/Forms.tsx @@ -53,9 +53,12 @@ export type ApiFormFieldHeader = { * @param error : Optional error message to display * @param exclude : Whether to exclude the field from the submitted data * @param placeholder : The placeholder text to display + * @param placeholderAutofill: Whether to allow auto-filling of the placeholder value * @param description : The description to display for the field * @param preFieldContent : Content to render before the field * @param postFieldContent : Content to render after the field + * @param leftSection : Content to render in the left section of the field + * @param rightSection : Content to render in the right section of the field * @param autoFill: Whether to automatically fill the field with data from the API * @param autoFillFilters: Optional filters to apply when auto-filling the field * @param onValueChange : Callback function to call when the field value changes @@ -103,9 +106,12 @@ export type ApiFormFieldType = { exclude?: boolean; read_only?: boolean; placeholder?: string; + placeholderAutofill?: boolean; description?: string; preFieldContent?: JSX.Element; postFieldContent?: JSX.Element; + leftSection?: JSX.Element; + rightSection?: JSX.Element; autoFill?: boolean; autoFillFilters?: any; adjustValue?: (value: any) => any; diff --git a/src/frontend/src/components/buttons/PrintingActions.tsx b/src/frontend/src/components/buttons/PrintingActions.tsx index 4cdf081895..dad818e96f 100644 --- a/src/frontend/src/components/buttons/PrintingActions.tsx +++ b/src/frontend/src/components/buttons/PrintingActions.tsx @@ -188,6 +188,7 @@ export function PrintingActions({ } + position='bottom-start' disabled={!enabled} actions={[ { diff --git a/src/frontend/src/components/forms/ApiForm.tsx b/src/frontend/src/components/forms/ApiForm.tsx index 365a6eb056..c442fb5820 100644 --- a/src/frontend/src/components/forms/ApiForm.tsx +++ b/src/frontend/src/components/forms/ApiForm.tsx @@ -115,6 +115,8 @@ export function OptionsApiForm({ if (!_props.fields) return _props; + _props.fields = { ..._props.fields }; + for (const [k, v] of Object.entries(_props.fields)) { _props.fields[k] = constructField({ field: v, diff --git a/src/frontend/src/components/forms/fields/ApiFormField.tsx b/src/frontend/src/components/forms/fields/ApiFormField.tsx index a1de487236..e5d56bbdd4 100644 --- a/src/frontend/src/components/forms/fields/ApiFormField.tsx +++ b/src/frontend/src/components/forms/fields/ApiFormField.tsx @@ -74,6 +74,7 @@ export function ApiFormField({ return { ...fieldDefinition, autoFill: undefined, + placeholderAutofill: undefined, autoFillFilters: undefined, onValueChange: undefined, adjustFilters: undefined, @@ -146,6 +147,7 @@ export function ApiFormField({ return ( diff --git a/src/frontend/src/components/forms/fields/TextField.tsx b/src/frontend/src/components/forms/fields/TextField.tsx index 98761716db..8e95011b4b 100644 --- a/src/frontend/src/components/forms/fields/TextField.tsx +++ b/src/frontend/src/components/forms/fields/TextField.tsx @@ -1,7 +1,15 @@ -import { TextInput } from '@mantine/core'; +import { t } from '@lingui/core/macro'; +import { TextInput, Tooltip } from '@mantine/core'; import { useDebouncedValue } from '@mantine/hooks'; -import { IconX } from '@tabler/icons-react'; -import { useCallback, useEffect, useId, useState } from 'react'; +import { IconCopyCheck, IconX } from '@tabler/icons-react'; +import { + type ReactNode, + useCallback, + useEffect, + useId, + useMemo, + useState +} from 'react'; import type { FieldValues, UseControllerReturn } from 'react-hook-form'; /* @@ -13,12 +21,14 @@ export default function TextField({ controller, fieldName, definition, + placeholderAutofill, onChange, onKeyDown }: Readonly<{ controller: UseControllerReturn; definition: any; fieldName: string; + placeholderAutofill?: boolean; onChange: (value: any) => void; onKeyDown: (value: any) => void; }>) { @@ -28,7 +38,7 @@ export default function TextField({ fieldState: { error } } = controller; - const { value } = field; + const { value } = useMemo(() => field, [field]); const [rawText, setRawText] = useState(value || ''); @@ -48,6 +58,44 @@ export default function TextField({ } }, [debouncedText]); + // Construct a "right section" for the text field + const textFieldRightSection: ReactNode = useMemo(() => { + if (definition.rightSection) { + // Use the specified override value + return definition.rightSection; + } else if (value) { + if (!definition.required && !definition.disabled) { + // Render a button to clear the text field + return ( + + onTextChange('')} + /> + + ); + } + } else if ( + !value && + definition.placeholder && + placeholderAutofill && + !definition.disabled + ) { + return ( + + onTextChange(definition.placeholder)} + /> + + ); + } + }, [placeholderAutofill, definition, value]); + return ( onTextChange('')} /> - ) : null - } + rightSection={textFieldRightSection} /> ); } diff --git a/src/frontend/src/components/items/ActionDropdown.tsx b/src/frontend/src/components/items/ActionDropdown.tsx index 20cc002f18..f9d5e41ef8 100644 --- a/src/frontend/src/components/items/ActionDropdown.tsx +++ b/src/frontend/src/components/items/ActionDropdown.tsx @@ -48,7 +48,8 @@ export function ActionDropdown({ actions, disabled = false, hidden = false, - noindicator = false + noindicator = false, + position }: { icon: ReactNode; tooltip: string; @@ -57,6 +58,7 @@ export function ActionDropdown({ disabled?: boolean; hidden?: boolean; noindicator?: boolean; + position?: FloatingPosition; }): ReactNode { const hasActions = useMemo(() => { return actions.some((action) => !action.hidden); @@ -71,7 +73,7 @@ export function ActionDropdown({ }, [tooltip]); return !hidden && hasActions ? ( - + { + return ( + + + {searchResult.image_url && ( + {searchResult.name} + )} + + + + {searchResult.name} ({searchResult.sku}) + + + {searchResult.description} + + + {searchResult.price && ( + + {searchResult.price} + + )} + {searchResult.exact && ( + + Exact Match + + )} + {searchResult.existing_part_id && + partId && + searchResult.existing_part_id === partId && ( + + Current part + + )} + {searchResult.existing_part_id && ( + + + Already Imported + + + )} + + {rightSection} + + + + ); +}; + +const SearchStep = ({ + selectSupplierPart, + partId +}: { + selectSupplierPart: (props: { + plugin: string; + supplier: string; + searchResult: SearchResult; + }) => void; + partId?: number; +}) => { + const [searchValue, setSearchValue] = useState(''); + const [supplier, setSupplier] = useState(''); + const [searchResults, setSearchResults] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + const supplierQuery = useQuery< + { plugin_slug: string; supplier_slug: string; supplier_name: string }[] + >({ + queryKey: ['supplier-import-list'], + queryFn: () => + api + .get(apiUrl(ApiEndpoints.plugin_supplier_list)) + .then((response) => response.data ?? []), + enabled: true + }); + + const handleSearch = useCallback>( + async (e) => { + e.preventDefault(); + if (!searchValue || !supplier) return; + + setIsLoading(true); + const [plugin_slug, supplier_slug] = JSON.parse(supplier); + const res = await api.get(apiUrl(ApiEndpoints.plugin_supplier_search), { + params: { + plugin: plugin_slug, + supplier: supplier_slug, + term: searchValue + } + }); + setSearchResults(res.data ?? []); + setIsLoading(false); + }, + [supplier, searchValue] + ); + + useEffect(() => { + if ( + supplier === '' && + supplierQuery.data && + supplierQuery.data.length > 0 + ) { + setSupplier( + JSON.stringify([ + supplierQuery.data[0].plugin_slug, + supplierQuery.data[0].supplier_slug + ]) + ); + } + }, [supplierQuery.data]); + + return ( + +
+ + setSearchValue(event.currentTarget.value)} + /> +