Merge branch 'master' of https://github.com/inventree/InvenTree into pui-only

This commit is contained in:
Matthias Mair 2024-11-10 00:39:43 +01:00
commit 7c36e5bc8b
No known key found for this signature in database
GPG Key ID: A593429DDA23B66A
263 changed files with 72514 additions and 56235 deletions

View File

@ -4,7 +4,7 @@
<p>Open Source Inventory Management System </p>
<!-- Badges -->
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/inventree/inventree)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/license/MIT)![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/inventree/inventree)
![CI](https://github.com/inventree/inventree/actions/workflows/qc_checks.yaml/badge.svg)
[![Documentation Status](https://readthedocs.org/projects/inventree/badge/?version=latest)](https://inventree.readthedocs.io/en/latest/?badge=latest)
![Docker Build](https://github.com/inventree/inventree/actions/workflows/docker.yaml/badge.svg)

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -1,11 +1,20 @@
---
title: Platform UI / React
title: React Frontend Development
---
## Setup
The new React-based UI will not be available by default. In order to set your development environment up to view the frontend, follow this guide.
The new UI requires a separate frontend server to run to serve data for the new Frontend.
The following documentation details how to setup and run a development installation of the InvenTree frontend user interface.
### Prerequisites
To run the frontend development server, you will need to have the following installed:
- Node.js
- Yarn
!!! note "Devcontainer"
The [devcontainer](./devcontainer.md) setup already includes all prerequisite packages, and is ready to run the frontend server.
### Install
@ -79,3 +88,27 @@ When running the frontend development server, some features may not work entirel
#### SSO Login
When logging into the frontend dev server via SSO, the redirect URL may not redirect correctly.
## Testing
The frontend codebase it tested using [Playwright](https://playwright.dev/). There are a large number of tests that cover the frontend codebase, which are run automatically as part of the CI pipeline.
### Install Playwright
To install the required packages to run the tests, you can use the following command:
```bash
cd src/frontend
npx playwright install
```
### Running Tests
To run the tests locally, in an interactive editor, you can use the following command:
```bash
cd src/frontend
npx playwright test --ui
```
This will first launch the backend server (at `http://localhost:8000`), and then run the tests against the frontend server (at `http://localhost:5173`). An interactive browser window will open, and you can run the tests individually or as a group.

View File

@ -4,19 +4,104 @@ title: User Interface Mixin
## User Interface Mixin
The *User Interface* mixin class provides a set of methods to implement custom functionality for the InvenTree web interface.
The `UserInterfaceMixin` class provides a set of methods to implement custom functionality for the InvenTree web interface.
### Enable User Interface Mixin
To enable user interface plugins, the global setting `ENABLE_PLUGINS_INTERFACE` must be enabled, in the [plugin settings](../../settings/global.md#plugin-settings).
## Plugin Context
## Custom UI Features
When rendering certain content in the user interface, the rendering functions are passed a `context` object which contains information about the current page being rendered. The type of the `context` object is defined in the `PluginContext` file:
The InvenTree user interface functionality can be extended in various ways using plugins. Multiple types of user interface *features* can be added to the InvenTree user interface.
{{ includefile("src/frontend/src/components/plugins/PluginContext.tsx", title="Plugin Context", fmt="javascript") }}
The entrypoint for user interface plugins is the `UserInterfaceMixin` class, which provides a number of methods which can be overridden to provide custom functionality. The `get_ui_features` method is used to extract available user interface features from the plugin:
## Custom Panels
::: plugin.base.ui.mixins.UserInterfaceMixin.get_ui_features
options:
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
Note here that the `get_ui_features` calls other methods to extract the available features from the plugin, based on the requested feature type. These methods can be overridden to provide custom functionality.
!!! info "Implementation"
Your custom plugin does not need to override the `get_ui_features` method. Instead, override one of the other methods to provide custom functionality.
### UIFeature Return Type
The `get_ui_features` method should return a list of `UIFeature` objects, which define the available user interface features for the plugin. The `UIFeature` class is defined as follows:
::: plugin.base.ui.mixins.UIFeature
options:
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
Note that the *options* field contains fields which may be specific to a particular feature type - read the documentation below on each feature type for more information.
### Dynamic Feature Loading
Each of the provided feature types can be loaded dynamically by the plugin, based on the information provided in the API request. For example, the plugin can choose to show or hide a particular feature based on the user permissions, or the current state of the system.
For examples of this dynamic feature loading, refer to the [sample plugin](#sample-plugin) implementation which demonstrates how to dynamically load custom panels based on the provided context.
### Javascript Source Files
The rendering function for the custom user interface features expect that the plugin provides a Javascript source file which contains the necessary code to render the custom content. The path to this file should be provided in the `source` field of the `UIFeature` object.
Note that the `source` field can include the name of the function to be called (if this differs from the expected default function name).
For example:
```
"source": "/static/plugins/my_plugin/my_plugin.js:my_custom_function"
```
## Available UI Feature Types
The following user interface feature types are available:
### Dashboard Items
The InvenTree dashboard is a collection of "items" which are displayed on the main dashboard page. Custom dashboard items can be added to the dashboard by implementing the `get_ui_dashboard_items` method:
::: plugin.base.ui.mixins.UserInterfaceMixin.get_ui_dashboard_items
options:
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
#### Dashboard Item Options
The *options* field in the returned `UIFeature` object can contain the following properties:
::: plugin.base.ui.mixins.CustomDashboardItemOptions
options:
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
#### Source Function
The frontend code expects a path to a javascript file containing a function named `renderDashboardItem` which will be called to render the custom dashboard item. Note that this function name can be overridden by appending the function name in the `source` field of the `UIFeature` object.
#### Example
Refer to the [sample plugin](#sample-plugin) for an example of how to implement server side rendering for custom panels.
### Panels
Many of the pages in the InvenTree web interface are built using a series of "panels" which are displayed on the page. Custom panels can be added to these pages, by implementing the `get_ui_panels` method:
@ -29,71 +114,11 @@ Many of the pages in the InvenTree web interface are built using a series of "pa
summary: False
members: []
The custom panels can display content which is generated either on the server side, or on the client side (see below).
#### Panel Options
### Server Side Rendering
The *options* field in the returned `UIFeature` object can contain the following properties:
The panel content can be generated on the server side, by returning a 'content' attribute in the response. This 'content' attribute is expected to be raw HTML, and is rendered directly into the page. This is particularly useful for displaying static content.
Server-side rendering is simple to implement, and can make use of the powerful Django templating system.
Refer to the [sample plugin](#sample-plugin) for an example of how to implement server side rendering for custom panels.
**Advantages:**
- Simple to implement
- Can use Django templates to render content
- Has access to the full InvenTree database, and content not available on the client side (via the API)
**Disadvantages:**
- Content is rendered on the server side, and cannot be updated without a page refresh
- Content is not interactive
### Client Side Rendering
The panel content can also be generated on the client side, by returning a 'source' attribute in the response. This 'source' attribute is expected to be a URL which points to a JavaScript file which will be loaded by the client.
Refer to the [sample plugin](#sample-plugin) for an example of how to implement client side rendering for custom panels.
#### Panel Render Function
The JavaScript file must implement a `renderPanel` function, which is called by the client when the panel is rendered. This function is passed two parameters:
- `target`: The HTML element which the panel content should be rendered into
- `context`: A dictionary of context data which can be used to render the panel content
**Example**
```javascript
export function renderPanel(target, context) {
target.innerHTML = "<h1>Hello, world!</h1>";
}
```
#### Panel Visibility Function
The JavaScript file can also implement a `isPanelHidden` function, which is called by the client to determine if the panel is displayed. This function is passed a single parameter, *context* - which is the same as the context data passed to the `renderPanel` function.
The `isPanelHidden` function should return a boolean value, which determines if the panel is displayed or not, based on the context data.
If the `isPanelHidden` function is not implemented, the panel will be displayed by default.
**Example**
```javascript
export function isPanelHidden(context) {
// Only visible for active parts
return context.model == 'part' && context.instance?.active;
}
```
## Custom UI Functions
User interface plugins can also provide additional user interface functions. These functions can be provided via the `get_ui_features` method:
::: plugin.base.ui.mixins.UserInterfaceMixin.get_ui_features
::: plugin.base.ui.mixins.CustomPanelOptions
options:
show_bases: False
show_root_heading: False
@ -102,36 +127,55 @@ User interface plugins can also provide additional user interface functions. The
summary: False
members: []
::: plugin.samples.integration.user_interface_sample.SampleUserInterfacePlugin.get_ui_features
#### Source Function
The frontend code expects a path to a javascript file containing a function named `renderPanel` which will be called to render the custom panel. Note that this function name can be overridden by appending the function name in the `source` field of the `UIFeature` object.
#### Example
Refer to the [sample plugin](#sample-plugin) for an example of how to implement server side rendering for custom panels.
### Template Editors
The `get_ui_template_editors` feature type can be used to provide custom template editors.
::: plugin.base.ui.mixins.UserInterfaceMixin.get_ui_template_editors
options:
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_source: True
members: []
Currently the following functions can be extended:
### Template editors
The `template_editor` feature type can be used to provide custom template editors.
**Example:**
{{ includefile("src/backend/InvenTree/plugin/samples/static/plugin/sample_template.js", title="sample_template.js", fmt="javascript") }}
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
### Template previews
The `template_preview` feature type can be used to provide custom template previews. For an example see:
The `get_ui_template_previews` feature type can be used to provide custom template previews:
**Example:**
::: plugin.base.ui.mixins.UserInterfaceMixin.get_ui_template_previews
options:
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
{{ includefile("src/backend/InvenTree/plugin/samples/static/plugin/sample_template.js", title="sample_template.js", fmt="javascript") }}
## Plugin Context
When rendering certain content in the user interface, the rendering functions are passed a `context` object which contains information about the current page being rendered. The type of the `context` object is defined in the `PluginContext` file:
{{ includefile("src/frontend/src/components/plugins/PluginContext.tsx", title="Plugin Context", fmt="javascript") }}
This context data can be used to provide additional information to the rendering functions, and can be used to dynamically render content based on the current state of the system.
### Additional Context
Note that additional context can be passed to the rendering functions by adding additional key-value pairs to the `context` field in the `UIFeature` return type (provided by the backend via the API). This field is optional, and can be used at the discretion of the plugin developer.
## Sample Plugin
A sample plugin which implements custom user interface functionality is provided in the InvenTree source code:
A sample plugin which implements custom user interface functionality is provided in the InvenTree source code, which provides a full working example of how to implement custom user interface functionality.
::: plugin.samples.integration.user_interface_sample.SampleUserInterfacePlugin
options:

View File

@ -93,6 +93,14 @@ There are two options to mark items as "received":
!!! note "Permissions"
Marking line items as received requires the "Purchase order" ADD permission.
### Item Location
When receiving items from a purchase order, the location of the items must be specified. There are multiple ways to specify the location:
* **Order Destination**: The *destination* field of the purchase order can be set to a specific location. When receiving items, the location will default to the destination location.
* **Line Item Location**: Each line item can have a specific location set. When receiving items, the location will default to the line item location. *Note: A destination specified at the line item level will override the destination specified at the order level.*
### Received Items
Each item marked as "received" is automatically converted into a stock item.

View File

@ -40,7 +40,7 @@ To enable access to the InvenTree server from other computers on a local network
## Background Worker
The background task manager must also be started. The InvenTree server is already running in the foreground, so open a *new shell window* to start the server.
The [background task manager](./processes.md#background-worker) must also be started. The InvenTree server is already running in the foreground, so open a *new shell window* to start the server.
### Activate Virtual Environment
@ -55,4 +55,4 @@ source ./env/bin/activate
(env) invoke worker
```
This will start the background process manager in the current shell.
This will start an instance of the background worker in the current shell.

View File

@ -19,7 +19,7 @@ The InvenTree web server is hosted using [Gunicorn](https://gunicorn.org/). Guni
### Supervisor
[Supervisor](http://supervisord.org/) is a process control system which monitors and controls multiple background processes. It is used in the InvenTree production setup to ensure that the server and background worker processes are always running.
[Supervisor](http://supervisord.org/) is a process control system which monitors and controls multiple background processes. It is used in the InvenTree production setup to ensure that the [web server](./processes.md#web-server) and [background worker](./processes.md#background-worker) processes are always running.
## Gunicorn
@ -98,11 +98,12 @@ The InvenTree server (and background task manager) should now be running!
In addition to the InvenTree server, you will need a method of delivering static and media files (this is *not* handled by the InvenTree server in a production environment).
!!! info "Read More"
Refer to the [Serving Files](./serving_files.md) section for more details
Refer to the [proxy server documentation](./processes.md#proxy-server) for more details
### Next Steps
You (or your system administrator) may wish to perform further steps such as placing the InvenTree server behind a reverse-proxy such as [caddy](https://caddyserver.com/), or [nginx](https://www.nginx.com/).
You (or your system administrator) may wish to perform further steps such as placing the InvenTree server behind a [reverse proxy](./processes.md#proxy-server) such as [caddy](https://caddyserver.com/), or [nginx](https://www.nginx.com/).
As production environment options are many and varied, such tasks are outside the scope of this documentation.
There are many great online tutorials about running django applications in production!

View File

@ -279,12 +279,12 @@ InvenTree requires some external directories for storing files:
| Environment Variable | Configuration File | Description | Default |
| --- | --- | --- | --- |
| INVENTREE_STATIC_ROOT | static_root | [Static files](./serving_files.md#static-files) directory | *Not specified* |
| INVENTREE_MEDIA_ROOT | media_root | [Media files](./serving_files.md#media-files) directory | *Not specified* |
| INVENTREE_STATIC_ROOT | static_root | [Static files](./processes.md#static-files) directory | *Not specified* |
| INVENTREE_MEDIA_ROOT | media_root | [Media files](./processes.md#media-files) directory | *Not specified* |
| INVENTREE_BACKUP_DIR | backup_dir | Backup files directory | *Not specified* |
!!! tip "Serving Files"
Read the [Serving Files](./serving_files.md) section for more information on hosting *static* and *media* files
Read the [proxy server documentation](./processes.md#proxy-server) for more information on hosting *static* and *media* files
### Static File Storage
@ -369,6 +369,15 @@ The logo and custom messages can be changed/set:
| INVENTREE_CUSTOMIZE | customize.navbar_message | Custom message for navbar | *Not specified* |
| INVENTREE_CUSTOMIZE | customize.hide_pui_banner | Disable PUI banner | False |
The INVENTREE_CUSTOMIZE environment variable must contain a json object with the keys from the table above and
the wanted values. Example:
```
INVENTREE_CUSTOMIZE={"login_message":"Hallo Michi","hide_pui_banner":"True"}
```
This example removes the PUI banner and sets a login message. Take care of the double quotes.
If you want to remove the InvenTree branding as far as possible from your end-user also check the [global server settings](../settings/global.md#server-settings).
!!! info "Custom Splash Screen Path"

View File

@ -87,7 +87,7 @@ Plugins are supported natively when running under docker. There are two ways to
The production docker compose configuration outlined on this page uses [Caddy](https://caddyserver.com/) to serve static files and media files. If you change this configuration, you will need to ensure that static and media files are served correctly.
!!! info "Read More"
Refer to the [Serving Files](./serving_files.md) section for more details
Refer to the [proxy server documentation](./processes.md#proxy-server) for more details
### SSL Certificates
@ -99,45 +99,11 @@ The example docker compose file launches the following containers:
| Container | Description |
| --- | --- |
| inventree-db | PostgreSQL database |
| inventree-server | Gunicorn web server |
| inventree-worker | django-q background worker |
| inventree-proxy | Caddy file server and reverse proxy |
| *inventree-cache* | *redis cache (optional)* |
#### PostgreSQL Database
A PostgreSQL database container which requires a username:password combination (which can be changed). This uses the official [PostgreSQL image](https://hub.docker.com/_/postgres).
#### Web Server
Runs an InvenTree web server instance, powered by a Gunicorn web server.
#### Background Worker
Runs the InvenTree background worker process. This spins up a second instance of the *inventree* container, with a different entrypoint command.
#### Proxy Server
Caddy working as a reverse proxy, separating requests for static and media files, and directing everything else to Gunicorn.
This container uses the official [caddy image](https://hub.docker.com/_/caddy).
!!! info "Nginx Proxy"
An alternative is to run nginx as the reverse proxy. A sample configuration file is provided in the `./contrib/container/` source directory.
#### Redis Cache
Redis is used as cache storage for the InvenTree server. This provides a more performant caching system which can useful in larger installations.
This container uses the official [redis image](https://hub.docker.com/_/redis).
!!! info "Redis on Docker"
Docker adds an additional network layer - that might lead to lower performance than bare metal.
To optimize and configure your redis deployment follow the [official docker guide](https://redis.io/docs/getting-started/install-stack/docker/#configuration).
!!! tip "Enable Cache"
While a redis container is provided in the default configuration, by default it is not enabled in the Inventree server. You can enable redis cache support by following the [caching configuration guide](./config.md#caching)
| inventree-db | [PostgreSQL database](./processes.md#database) |
| inventree-server | [InvenTree web server](./processes.md#web-server) |
| inventree-worker | [django-q background worker](./processes.md#background-worker) |
| inventree-proxy | [Caddy file server and reverse proxy](./processes.md#proxy-server) |
| *inventree-cache* | [*redis cache (optional)*](./processes.md#cache-server) |
### Data Volume

View File

@ -37,6 +37,9 @@ The following files required for this setup are provided with the InvenTree sour
Download these files to a directory on your local machine.
!!! warning "File Extensions"
If your computer adds *.txt* extensions to any of the downloaded files, rename the file and remove the added extension before continuing!
!!! success "Working Directory"
This tutorial assumes you are working from a directory where all of these files are located.
@ -101,10 +104,11 @@ docker compose up -d
This command launches the following containers:
- `inventree-db` - PostgreSQL database
- `inventree-server` - InvenTree web server
- `inventree-worker` - Background worker
- `inventree-proxy` - Caddy reverse proxy
- `inventree-db` - [PostgreSQL database](./processes.md#database)
- `inventree-server` - [InvenTree web server](./processes.md#web-server)
- `inventree-worker` - [Background worker](./processes.md#background-worker)
- `inventree-proxy` - [Caddy reverse proxy](./processes.md#proxy-server)
- `inventree-cache` - [Redis cache](./processes.md#cache-server)
!!! success "Up and Running!"
You should now be able to view the InvenTree login screen at [http://inventree.localhost](http://inventree.localhost) (or whatever custom domain you have configured in the `.env` file).

View File

@ -66,14 +66,14 @@ In addition to the location where the InvenTree source code is located, you will
InvenTree requires a directory for storage of [static files](./config.md#static-file-storage).
!!! info "Read More"
Refer to the [Serving Files](./serving_files.md) section for more details
Refer to the [proxy server documentation](./processes.md#proxy-server) for more details
#### Media Files
InvenTree requires a directory for storage of [user uploaded files](./config.md#uploaded-file-storage)
!!! info "Read More"
Refer to the [Serving Files](./serving_files.md) section for more details
Refer to the [proxy server documentation](./processes.md#proxy-server) for more details
#### Backup Directory

View File

@ -132,11 +132,14 @@ To update InvenTree run `apt install --only-upgrade inventree` - this might need
## Controlling InvenTree
### Services
InvenTree installs multiple services that can be controlled with your local system runner (`service` or `systemctl`).
The service `inventree` controls everything, `inventree-web` the (internal) webserver and `inventree-worker` the background worker(s).
The service `inventree` controls everything, `inventree-web` (the [InvenTree web server](./processes.md#web-server)) and `inventree-worker` the [background worker(s)](./processes.md#background-worker).
More instances of the worker can be instantiated from the command line. This is only meant for advanced users.
This sample script launches 3 services. By default, 1 is launched.
```bash
inventree scale worker=3
```

View File

@ -29,30 +29,7 @@ Independent of the preferred installation method, InvenTree provides a number of
## System Components
The InvenTree server ecosystem consists of the following components:
### Database
A persistent database is required for data storage. By default, InvenTree is configured to use [PostgreSQL](https://www.postgresql.org/) - and this is the recommended database backend to use. However, InvenTree can also be configured to connect to any database backend [supported by Django]({% include "django.html" %}/ref/databases/)
### Web Server
The bulk of the InvenTree code base supports the custom web server application. The web server application services user requests and facilitates database access. The webserver provides access to the [API](../api/api.md) for performing database query actions.
InvenTree uses [Gunicorn](https://gunicorn.org/) as the web server - a Python WSGI HTTP server.
### Background Tasks
A separate application handles management of [background tasks](../settings/tasks.md), separate to user-facing web requests. The background task manager is required to perform asynchronous tasks, such as sending emails, generating reports, and other long-running tasks.
InvenTree uses [django-q2](https://django-q2.readthedocs.io/en/master/) as the background task manager.
### File Storage
Uploaded *media* files (images, attachments, reports, etc) and *static* files (javascript, html) are stored to a persistent storage volume. A *file server* is required to serve these files to the user.
InvenTree uses [Caddy](https://caddyserver.com/) as a file server, which is configured to serve both *static* and *media* files. Additionally, Caddy provides SSL termination and reverse proxy services.
The InvenTree software stack is composed of multiple components, each of which is required for a fully functional server environment. Your can read more about the [InvenTree processes here](./processes.md).
## OS Requirements
@ -132,4 +109,4 @@ So, for a production setup, you should set `INVENTREE_DEBUG=false` in the [confi
Turning off DEBUG mode creates further work for the system administrator. In particular, when running in DEBUG mode, the InvenTree web server natively manages *static* and *media* files, which means that the InvenTree server can run "monolithically" without the need for a separate web server.
!!! info "Read More"
Refer to the [Serving Files](./serving_files.md) section for more details
Refer to the [proxy server documentation](./processes.md#proxy-server) for more details

View File

@ -0,0 +1,103 @@
---
title: InvenTree Processes
---
## InvenTree Processes
InvenTree is a complex application, and there are a number of processes which must be running in order for the system to operate correctly. Typically, these processes are started automatically when the InvenTree application stack is launched. However, in some cases, it may be necessary to start these processes manually.
System administrators should be aware of the following processes when configuring an InvenTree installation:
### Database
At the core of the InvenTree application is the SQL database. The database is responsible for storing all of the persistent data which is used by the InvenTree application.
InvenTree supports a [number of database backends]({% include "django.html" %}/ref/databases) - which typically require their own process to be running.
Refer to the [database configuration guide](./config.md#database-options) for more information on selecting and configuring the database backend.
In running InvenTree via [docker compose](./docker_install.md), the database process is managed by the `inventree-db` service which provides a [Postgres docker container](https://hub.docker.com/_/postgres).
### Web Server
The InvenTree web server is responsible for serving the InvenTree web interface to users. The web server is a [Django](https://www.djangoproject.com/) application, which is run using the [Gunicorn](https://gunicorn.org/) WSGI server.
The web server interfaces with the backend database and provides a [REST API](../api/api.md) (via the [Django REST framework](https://www.django-rest-framework.org/)) which is used by the frontend web interface.
In running InvenTree via [docker compose](./docker_install.md), the web server process is managed by the `inventree-server` service, which runs from a custom docker image.
### Proxy Server
In a production installation, the InvenTree web server application *does not* provide hosting of static files, or user-uploaded (media) files. Instead, these files should be served by a separate web server, such as [Caddy](https://caddyserver.com/), [Nginx](https://www.nginx.com/), or [Apache](https://httpd.apache.org/).
!!! info "Debug Mode"
When running in [production mode](./bare_prod.md) (i.e. the `INVENTREE_DEBUG` flag is disabled), a separate web server is required for serving *static* and *media* files. In `DEBUG` mode, the django webserver facilitates delivery of *static* and *media* files, but this is explicitly not suitable for a production environment.
!!! tip "Read More"
You can find further information in the [django documentation]({% include "django.html" %}/howto/static-files/deployment/).
A proxy server is required to store and serve static files (such as images, documents, etc) which are used by the InvenTree application. As django is not designed to serve static files in a production environment, a separate file server is required. For our docker compose setup, we use the `inventree-proxy` service, which runs a [Caddy](https://caddyserver.com/) proxy server to serve static files.
In addition to serving static files, the proxy server also provides a reverse proxy to the InvenTree web server, allowing the InvenTree web interface to be accessed via a standard HTTP/HTTPS port.
Further, it provides an authentication endpoint for accessing files in the `/static/` and `/media/` directories.
Finally, it provides a [Let's Encrypt](https://letsencrypt.org/) endpoint for automatic SSL certificate generation and renewal.
#### Static Files
Static files can be served without any need for authentication. In fact, they must be accessible *without* authentication, otherwise the unauthenticated views (such as the login screen) will not function correctly.
#### Media Files
It is highly recommended that the *media* files are served behind an authentication layer. This is because the media files are user-uploaded, and may contain sensitive information. Most modern web servers provide a way to serve files behind an authentication layer.
#### Example Configuration
The [docker production example](./docker.md) provides an example using [Caddy](https://caddyserver.com) to serve *static* and *media* files, and redirecting other requests to the InvenTree web server itself.
Caddy is a modern web server which is easy to configure and provides a number of useful features, including automatic SSL certificate generation.
#### Alternatives to Caddy
An alternative is to run nginx as the reverse proxy. A sample configuration file is provided in the `./contrib/container/` source directory.
#### Integrating with Existing Proxy
You may wish to integrate the InvenTree web server with an existing reverse proxy server. This is possible, but requires careful configuration to ensure that the static and media files are served correctly.
*Note: A custom configuration of the proxy server is outside the scope of this documentation!*
### Background Worker
The InvenTree background worker is responsible for handling [asynchronous tasks](../settings/tasks.md) which are not suitable for the main web server process. This includes tasks such as sending emails, generating reports, and other long-running tasks.
InvenTree uses the [django-q2](https://django-q2.readthedocs.io/en/master/) package to manage background tasks.
The background worker process is managed by the `inventree-worker` service in the [docker compose](./docker_install.md) setup. Note that this services runs a duplicate copy of the `inventree-server` container, but with a different entrypoint command which starts the background worker process.
#### Important Information
If the background worker process is not running, InvenTree will not be able to perform background tasks. This can lead to issues such as emails not being sent, or reports not being generated. Additionally, certain data may not be updated correctly if the background worker is not running.
!!! warning "Background Worker"
The background worker process is a critical part of the InvenTree application stack. It is important that this process is running correctly in order for the InvenTree application to operate correctly.
#### Limitations
If the [cache server](#cache-server) is not running, the background worker will be limited to running a single threaded worker. This is because the background worker uses the cache server to manage task locking, and without a global cache server to communicate between processes, concurrency issues can occur.
### Cache Server
The InvenTree cache server is used to store temporary data which is shared between the InvenTree web server and the background worker processes. The cache server is also used to store task information, and to manage task locking between the background worker processes.
Using a cache server can significantly improve the performance of the InvenTree application, as it reduces the need to query the database for frequently accessed data.
InvenTree uses the [Redis](https://redis.io/) cache server to manage cache data. When running in docker, we use the official [redis image](https://hub.docker.com/_/redis).
!!! info "Redis on Docker"
Docker adds an additional network layer - that might lead to lower performance than bare metal.
To optimize and configure your redis deployment follow the [official docker guide](https://redis.io/docs/getting-started/install-stack/docker/#configuration).
!!! tip "Enable Cache"
While a redis container is provided in the default configuration, by default it is not enabled in the Inventree server. You can enable redis cache support by following the [caching configuration guide](./config.md#caching)

View File

@ -1,29 +0,0 @@
---
title: Serving Static and Media Files
---
## Serving Files
In a production installation, the InvenTree web server application *does not* provide hosting of static files, or user-uploaded (media) files. Instead, these files should be served by a separate web server, such as [Caddy](https://caddyserver.com/), [Nginx](https://www.nginx.com/), or [Apache](https://httpd.apache.org/).
!!! info "Debug Mode"
When running in [production mode](./bare_prod.md) (i.e. the `INVENTREE_DEBUG` flag is disabled), a separate web server is required for serving *static* and *media* files. In `DEBUG` mode, the django webserver facilitates delivery of *static* and *media* files, but this is explicitly not suitable for a production environment.
!!! tip "Read More"
You can find further information in the [django documentation]({% include "django.html" %}/howto/static-files/deployment/).
There are *many* different ways that a sysadmin might wish to handle this - and it depends on your particular installation requirements.
### Static Files
Static files can be served without any need for authentication. In fact, they must be accessible *without* authentication, otherwise the unauthenticated views (such as the login screen) will not function correctly.
### Media Files
It is highly recommended that the *media* files are served behind an authentication layer. This is because the media files are user-uploaded, and may contain sensitive information. Most modern web servers provide a way to serve files behind an authentication layer.
### Example Configuration
The [docker production example](./docker.md) provides an example using [Caddy](https://caddyserver.com) to serve *static* and *media* files, and redirecting other requests to the InvenTree web server itself.
Caddy is a modern web server which is easy to configure and provides a number of useful features, including automatic SSL certificate generation.

View File

@ -18,6 +18,19 @@ If there are some icons missing in the tabler icons package, users can even inst
A stock location type represents a specific type of location (e.g. one specific size of drawer, shelf, ... or box) which can be assigned to multiple stock locations. In the first place, it is used to specify an icon and having the icon in sync for all locations that use this location type, but it also serves as a data field to quickly see what type of location this is. It is planned to add e.g. drawer dimension information to the location type to add a "find a matching, empty stock location" tool.
## External Stock Location
An external stock location can be used to indicate that items in there might not be available
for immediate usage. Stock items in an external location are marked with an additional icon
in the build order line items view where the material is allocated.
{% with id="stock_external_icon", url="stock/stock_external_icon.png", description="External stock indication" %}
{% include 'img.html' %}
{% endwith %}
Anyhow there is no limitation on the stock item. It can be allocated as usual.
The external flag does not get inherited to sublocations.
## Stock Item
A *Stock Item* is an actual instance of a [*Part*](../part/part.md) item. It represents a physical quantity of the *Part* in a specific location.

View File

@ -88,6 +88,7 @@ nav:
- Security: security.md
- Install:
- Introduction: start/intro.md
- Processes: start/processes.md
- Configuration: start/config.md
- Docker:
- Introduction: start/docker.md
@ -97,7 +98,6 @@ nav:
- Installer: start/installer.md
- Production: start/bare_prod.md
- Development: start/bare_dev.md
- Serving Files: start/serving_files.md
- User Accounts: start/accounts.md
- Data Backup: start/backup.md
- Invoke: start/invoke.md

View File

@ -17,6 +17,9 @@
},
{
"pattern": "https://www.reddit.com/r/InvenTree/"
},
{
"pattern": "https://opensource.org/license/MIT"
}
]
}

View File

@ -307,21 +307,21 @@ mkdocs-get-deps==0.2.0 \
--hash=sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c \
--hash=sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134
# via mkdocs
mkdocs-git-revision-date-localized-plugin==1.2.9 \
--hash=sha256:dea5c8067c23df30275702a1708885500fadf0abfb595b60e698bffc79c7a423 \
--hash=sha256:df9a50873fba3a42ce9123885f8c53d589e90ef6c2443fe3280ef1e8d33c8f65
mkdocs-git-revision-date-localized-plugin==1.3.0 \
--hash=sha256:439e2f14582204050a664c258861c325064d97cdc848c541e48bb034a6c4d0cb \
--hash=sha256:c99377ee119372d57a9e47cff4e68f04cce634a74831c06bc89b33e456e840a1
# via -r docs/requirements.in
mkdocs-include-markdown-plugin==6.2.2 \
--hash=sha256:d293950f6499d2944291ca7b9bc4a60e652bbfd3e3a42b564f6cceee268694e7 \
--hash=sha256:f2bd5026650492a581d2fd44be6c22f90391910d76582b96a34c264f2d17875d
mkdocs-include-markdown-plugin==7.0.0 \
--hash=sha256:a8eac8f2e6aa391d82d1d5e473b819b52393d91464060c02db5741834fe9008b \
--hash=sha256:bf8d19245ae3fb2eea395888e80c60bc91806a0d879279707d707896c24319c3
# via -r docs/requirements.in
mkdocs-macros-plugin==1.3.6 \
--hash=sha256:074bc072cac14c28724037b6988743cd9425752bdd35ae05fbf96b1b2457f3b7 \
--hash=sha256:74fd418c8e1f9f021b7a45bb1c7d7461d8ae09ccec241787f3971e733374da8c
mkdocs-macros-plugin==1.3.7 \
--hash=sha256:02432033a5b77fb247d6ec7924e72fc4ceec264165b1644ab8d0dc159c22ce59 \
--hash=sha256:17c7fd1a49b94defcdb502fd453d17a1e730f8836523379d21292eb2be4cb523
# via -r docs/requirements.in
mkdocs-material==9.5.42 \
--hash=sha256:452a7c5d21284b373f36b981a2cbebfff59263feebeede1bc28652e9c5bbe316 \
--hash=sha256:92779b5e9b5934540c574c11647131d217dc540dce72b05feeda088c8eb1b8f2
mkdocs-material==9.5.43 \
--hash=sha256:4aae0664c456fd12837a3192e0225c17960ba8bf55d7f0a7daef7e4b0b914a34 \
--hash=sha256:83be7ff30b65a1e4930dfa4ab911e75780a3afc9583d162692e434581cb46979
# via -r docs/requirements.in
mkdocs-material-extensions==1.3.1 \
--hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \

View File

@ -221,6 +221,7 @@ class InfoView(AjaxView):
'instance': InvenTree.version.inventreeInstanceName(),
'apiVersion': InvenTree.version.inventreeApiVersion(),
'worker_running': is_worker_running(),
'worker_count': settings.BACKGROUND_WORKER_COUNT,
'worker_pending_tasks': self.worker_pending_tasks(),
'plugins_enabled': settings.PLUGINS_ENABLED,
'plugins_install_disabled': settings.PLUGINS_INSTALL_DISABLED,
@ -235,6 +236,9 @@ class InfoView(AjaxView):
'platform': InvenTree.version.inventreePlatform() if is_staff else None,
'installer': InvenTree.version.inventreeInstaller() if is_staff else None,
'target': InvenTree.version.inventreeTarget() if is_staff else None,
'django_admin': settings.INVENTREE_ADMIN_URL
if (is_staff and settings.INVENTREE_ADMIN_ENABLED)
else None,
}
return JsonResponse(data)

View File

@ -1,13 +1,36 @@
"""InvenTree API version information."""
# InvenTree API version
INVENTREE_API_VERSION = 273
INVENTREE_API_VERSION = 279
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""
INVENTREE_API_TEXT = """
v279 - 2024-11-09 : https://github.com/inventree/InvenTree/pull/8458
- Adds "order_outstanding" and "part" filters to the BuildLine API endpoint
- Adds "order_outstanding" filter to the SalesOrderLineItem API endpoint
v278 - 2024-11-07 : https://github.com/inventree/InvenTree/pull/8445
- Updates to the SalesOrder API endpoints
- Add "shipment count" information to the SalesOrder API endpoints
- Allow null value for SalesOrderAllocation.shipment field
- Additional filtering options for allocation endpoints
v277 - 2024-11-01 : https://github.com/inventree/InvenTree/pull/8278
- Allow build order list to be filtered by "outstanding" (alias for "active")
v276 - 2024-10-31 : https://github.com/inventree/InvenTree/pull/8403
- Adds 'destination' field to the PurchaseOrder model and API endpoints
v275 - 2024-10-31 : https://github.com/inventree/InvenTree/pull/8396
- Adds SKU and MPN fields to the StockItem serializer
- Additional export options for the StockItem serializer
v274 - 2024-10-29 : https://github.com/inventree/InvenTree/pull/8392
- Add more detailed information to NotificationEntry API serializer
v273 - 2024-10-28 : https://github.com/inventree/InvenTree/pull/8376
- Fixes for the BuildLine API endpoint

View File

@ -1022,7 +1022,14 @@ def get_objectreference(
ret = {}
if url_fnc:
ret['link'] = url_fnc()
return {'name': str(item), 'model': str(model_cls._meta.verbose_name), **ret}
return {
'name': str(item),
'model_name': str(model_cls._meta.verbose_name),
'model_type': str(model_cls._meta.model_name),
'model_id': getattr(item, 'pk', None),
**ret,
}
Inheritors_T = TypeVar('Inheritors_T')

View File

@ -36,6 +36,23 @@ def get_token_from_request(request):
return None
# List of target URL endpoints where *do not* want to redirect to
urls = [
reverse_lazy('account_login'),
reverse_lazy('admin:login'),
reverse_lazy('admin:logout'),
]
# Do not redirect requests to any of these paths
paths_ignore = [
'/api/',
'/auth/',
'/js/', # TODO - remove when CUI is removed
settings.MEDIA_URL,
settings.STATIC_URL,
]
class AuthRequiredMiddleware:
"""Check for user to be authenticated."""
@ -108,22 +125,6 @@ class AuthRequiredMiddleware:
if not authorized:
path = request.path_info
# List of URL endpoints we *do not* want to redirect to
urls = [
reverse_lazy('account_login'),
reverse_lazy('admin:login'),
reverse_lazy('admin:logout'),
]
# Do not redirect requests to any of these paths
paths_ignore = [
'/api/',
'/auth/',
'/js/',
settings.MEDIA_URL,
settings.STATIC_URL,
]
if path not in urls and not any(
path.startswith(p) for p in paths_ignore
):

View File

@ -8,6 +8,7 @@ from django.http import Http404
import rest_framework.exceptions
import sentry_sdk
from djmoney.contrib.exchange.exceptions import MissingRate
from sentry_sdk.integrations.django import DjangoIntegration
import InvenTree.version
@ -27,6 +28,7 @@ def sentry_ignore_errors():
"""
return [
Http404,
MissingRate,
ValidationError,
rest_framework.exceptions.AuthenticationFailed,
rest_framework.exceptions.NotAuthenticated,

View File

@ -510,6 +510,7 @@ class UserCreateSerializer(ExtendedUserSerializer):
def create(self, validated_data):
"""Send an e email to the user after creation."""
from InvenTree.helpers_model import get_base_url
from InvenTree.tasks import email_user, offload_task
base_url = get_base_url()
@ -527,8 +528,12 @@ class UserCreateSerializer(ExtendedUserSerializer):
if base_url:
message += f'\n\nURL: {base_url}'
subject = _('Welcome to InvenTree')
# Send the user an onboarding email (from current site)
instance.email_user(subject=_('Welcome to InvenTree'), message=message)
offload_task(
email_user, instance.pk, str(subject), str(message), force_async=True
)
return instance

View File

@ -840,13 +840,20 @@ _q_worker_timeout = int(
get_setting('INVENTREE_BACKGROUND_TIMEOUT', 'background.timeout', 90)
)
# Prevent running multiple background workers if global cache is disabled
# This is to prevent scheduling conflicts due to the lack of a shared cache
BACKGROUND_WORKER_COUNT = (
int(get_setting('INVENTREE_BACKGROUND_WORKERS', 'background.workers', 4))
if GLOBAL_CACHE_ENABLED
else 1
)
# django-q background worker configuration
Q_CLUSTER = {
'name': 'InvenTree',
'label': 'Background Tasks',
'workers': int(
get_setting('INVENTREE_BACKGROUND_WORKERS', 'background.workers', 4)
),
'workers': BACKGROUND_WORKER_COUNT,
'timeout': _q_worker_timeout,
'retry': max(120, _q_worker_timeout + 30),
'max_attempts': int(

View File

@ -12,6 +12,7 @@ from datetime import datetime, timedelta
from typing import Callable, Optional
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import AppRegistryNotReady
from django.core.management import call_command
from django.db import DEFAULT_DB_ALIAS, connections
@ -693,3 +694,14 @@ def check_for_migrations(force: bool = False, reload_registry: bool = True):
# We should be current now - triggering full reload to make sure all models
# are loaded fully in their new state.
registry.reload_plugins(full_reload=True, force_reload=True, collect=True)
def email_user(user_id: int, subject: str, message: str) -> None:
"""Send a message to a user."""
try:
user = get_user_model().objects.get(pk=user_id)
except Exception:
logger.warning('User <%s> not found - cannot send welcome message', user_id)
return
user.email_user(subject=subject, message=message)

View File

@ -38,6 +38,8 @@ class MiddlewareTests(InvenTreeTestCase):
def test_token_auth(self):
"""Test auth with token auth."""
target = reverse('api-license')
# get token
response = self.client.get(reverse('api-token'), format='json', data={})
token = response.data['token']
@ -45,16 +47,17 @@ class MiddlewareTests(InvenTreeTestCase):
# logout
self.client.logout()
# this should raise a 401
self.check_path(reverse('api-license'), 401)
self.check_path(target, 401)
# Request with broken token
self.check_path(reverse('api-license'), 401, HTTP_Authorization='Token abcd123')
self.check_path(target, 401, HTTP_Authorization='Token abcd123')
# should still fail without token
self.check_path(reverse('api-license'), 401)
self.check_path(target, 401)
# request with token
self.check_path(reverse('api-license'), HTTP_Authorization=f'Token {token}')
self.check_path(target, HTTP_Authorization=f'Token {token}')
def test_error_exceptions(self):
"""Test that ignored errors are not logged."""

View File

@ -40,6 +40,9 @@ class BuildFilter(rest_filters.FilterSet):
active = rest_filters.BooleanFilter(label='Build is active', method='filter_active')
# 'outstanding' is an alias for 'active' here
outstanding = rest_filters.BooleanFilter(label='Build is outstanding', method='filter_active')
def filter_active(self, queryset, name, value):
"""Filter the queryset to either include or exclude orders which are active."""
if str2bool(value):
@ -354,6 +357,23 @@ class BuildLineFilter(rest_filters.FilterSet):
tracked = rest_filters.BooleanFilter(label=_('Tracked'), field_name='bom_item__sub_part__trackable')
testable = rest_filters.BooleanFilter(label=_('Testable'), field_name='bom_item__sub_part__testable')
part = rest_filters.ModelChoiceFilter(
queryset=part.models.Part.objects.all(),
label=_('Part'),
field_name='bom_item__sub_part',
)
order_outstanding = rest_filters.BooleanFilter(
label=_('Order Outstanding'),
method='filter_order_outstanding'
)
def filter_order_outstanding(self, queryset, name, value):
"""Filter by whether the associated BuildOrder is 'outstanding'."""
if str2bool(value):
return queryset.filter(build__status__in=BuildStatusGroups.ACTIVE_CODES)
return queryset.exclude(build__status__in=BuildStatusGroups.ACTIVE_CODES)
allocated = rest_filters.BooleanFilter(label=_('Allocated'), method='filter_allocated')
def filter_allocated(self, queryset, name, value):
@ -380,12 +400,28 @@ class BuildLineFilter(rest_filters.FilterSet):
return queryset.exclude(flt)
class BuildLineEndpoint:
"""Mixin class for BuildLine API endpoints."""
queryset = BuildLine.objects.all()
serializer_class = build.serializers.BuildLineSerializer
def get_serializer(self, *args, **kwargs):
"""Return the serializer instance for this endpoint."""
kwargs['context'] = self.get_serializer_context()
try:
params = self.request.query_params
kwargs['part_detail'] = str2bool(params.get('part_detail', True))
kwargs['build_detail'] = str2bool(params.get('build_detail', False))
except AttributeError:
pass
return self.serializer_class(*args, **kwargs)
def get_source_build(self) -> Build:
"""Return the source Build object for the BuildLine queryset.

View File

@ -851,8 +851,13 @@ class Build(
if location is None:
location = self.destination or self.part.get_default_location()
if self.part.has_trackable_parts and not serials:
raise ValidationError({
'serials': _("Serial numbers must be provided for trackable parts")
})
# We are generating multiple serialized outputs
if serials or self.part.has_trackable_parts:
if serials:
"""Create multiple build outputs with a single quantity of 1."""
# Create tracking entries for each item

View File

@ -7,6 +7,7 @@ from django.db import models, transaction
from django.db.models import (
BooleanField,
Case,
Count,
ExpressionWrapper,
F,
FloatField,
@ -179,6 +180,7 @@ class BuildSerializer(NotesFieldMixin, DataImportExportSerializerMixin, InvenTre
return reference
@transaction.atomic
def create(self, validated_data):
"""Save the Build object."""
@ -191,7 +193,7 @@ class BuildSerializer(NotesFieldMixin, DataImportExportSerializerMixin, InvenTre
InvenTree.tasks.offload_task(
build.tasks.create_child_builds,
build_order.pk,
group='build',
group='build'
)
return build_order
@ -1276,8 +1278,6 @@ class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
'pk',
'build',
'bom_item',
'bom_item_detail',
'part_detail',
'quantity',
# Build detail fields
@ -1313,6 +1313,11 @@ class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
# Extra fields only for data export
'part_description',
'part_category_name',
# Extra detail (related field) serializers
'bom_item_detail',
'part_detail',
'build_detail',
]
read_only_fields = [
@ -1321,6 +1326,19 @@ class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
'allocations',
]
def __init__(self, *args, **kwargs):
"""Determine which extra details fields should be included"""
part_detail = kwargs.pop('part_detail', True)
build_detail = kwargs.pop('build_detail', False)
super().__init__(*args, **kwargs)
if not part_detail:
self.fields.pop('part_detail', None)
if not build_detail:
self.fields.pop('build_detail', None)
# Build info fields
build_reference = serializers.CharField(source='build.reference', label=_('Build Reference'), read_only=True)
@ -1360,8 +1378,11 @@ class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
)
part_detail = part_serializers.PartBriefSerializer(source='bom_item.sub_part', many=False, read_only=True, pricing=False)
build_detail = BuildSerializer(source='build', part_detail=False, many=False, read_only=True)
# Annotated (calculated) fields
# Total quantity of allocated stock
allocated = serializers.FloatField(
label=_('Allocated Stock'),
read_only=True
@ -1400,9 +1421,13 @@ class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
"""
queryset = queryset.select_related(
'build',
'build__part',
'build__part__pricing_data',
'bom_item',
'bom_item__part',
'bom_item__part__pricing_data',
'bom_item__sub_part',
'bom_item__sub_part__pricing_data'
)
# Pre-fetch related fields
@ -1476,7 +1501,7 @@ class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
allocated=Coalesce(
Sum('allocations__quantity'), 0,
output_field=models.DecimalField()
),
)
)
ref = 'bom_item__sub_part__'

View File

@ -1,11 +1,15 @@
"""Background task definitions for the BuildOrder app."""
import logging
import random
import time
from datetime import timedelta
from decimal import Decimal
from django.contrib.auth.models import User
from django.template.loader import render_to_string
from django.db import transaction
from django.utils.translation import gettext_lazy as _
from allauth.account.models import EmailAddress
@ -198,27 +202,49 @@ def create_child_builds(build_id: int) -> None:
assembly_items = build_order.part.get_bom_items().filter(sub_part__assembly=True)
for item in assembly_items:
quantity = item.quantity * build_order.quantity
# Random delay, to reduce likelihood of race conditions from multiple build orders being created simultaneously
time.sleep(random.random())
sub_order = build_models.Build.objects.create(
part=item.sub_part,
quantity=quantity,
title=build_order.title,
batch=build_order.batch,
parent=build_order,
target_date=build_order.target_date,
sales_order=build_order.sales_order,
issued_by=build_order.issued_by,
responsible=build_order.responsible,
)
with transaction.atomic():
# Atomic transaction to ensure that all child build orders are created together, or not at all
# This is critical to prevent duplicate child build orders being created (e.g. if the task is re-run)
# Offload the child build order creation to the background task queue
InvenTree.tasks.offload_task(
create_child_builds,
sub_order.pk,
group='build'
)
sub_build_ids = []
for item in assembly_items:
quantity = item.quantity * build_order.quantity
# Check if the child build order has already been created
if build_models.Build.objects.filter(
part=item.sub_part,
parent=build_order,
quantity=quantity,
status__in=BuildStatusGroups.ACTIVE_CODES
).exists():
continue
sub_order = build_models.Build.objects.create(
part=item.sub_part,
quantity=quantity,
title=build_order.title,
batch=build_order.batch,
parent=build_order,
target_date=build_order.target_date,
sales_order=build_order.sales_order,
issued_by=build_order.issued_by,
responsible=build_order.responsible,
)
sub_build_ids.append(sub_order.pk)
for pk in sub_build_ids:
# Offload the child build order creation to the background task queue
InvenTree.tasks.offload_task(
create_child_builds,
pk,
group='build'
)
def notify_overdue_build_order(bo: build_models.Build):

View File

@ -451,6 +451,10 @@ class BuildTest(BuildAPITest):
# Now, let's delete each build output individually via the API
outputs = bo.build_outputs.all()
# Assert that each output is currently in production
for output in outputs:
self.assertTrue(output.is_building)
delete_url = reverse('api-build-output-delete', kwargs={'pk': 1})
response = self.post(

View File

@ -895,7 +895,9 @@ class BaseInvenTreeSetting(models.Model):
except ValidationError as e:
raise e
except Exception:
raise ValidationError({'value': _('Invalid value')})
raise ValidationError({
'value': _('Value does not pass validation checks')
})
def validate_unique(self, exclude=None):
"""Ensure that the key:value pair is unique. In addition to the base validators, this ensures that the 'key' is unique, using a case-insensitive comparison.

View File

@ -28,6 +28,10 @@ database:
# Set debug to False to run in production mode, or use the environment variable INVENTREE_DEBUG
debug: True
# Additional debug options
debug_querycount: False
debug_shell: False
# Set to False to disable the admin interface, or use the environment variable INVENTREE_ADMIN_ENABLED
#admin_enabled: True
@ -114,10 +118,10 @@ use_x_forwarded_host: false
# Override with the environment variable INVENTREE_USE_X_FORWARDED_PORT
use_x_forwarded_port: false
# Cookie settings
cookie:
secure: false
samesite: false
# Cookie settings (nominally the default settings should be fine)
#cookie:
# secure: false
# samesite: false
# Cross Origin Resource Sharing (CORS) settings (see https://github.com/adamchainz/django-cors-headers)
cors:

View File

@ -5,6 +5,7 @@ from django.urls import include, path
from drf_spectacular.utils import extend_schema
from rest_framework import permissions
from rest_framework.exceptions import PermissionDenied
from rest_framework.response import Response
from rest_framework.views import APIView
@ -20,6 +21,39 @@ from InvenTree.mixins import (
RetrieveUpdateAPI,
RetrieveUpdateDestroyAPI,
)
from users.models import check_user_permission
class DataImporterPermission(permissions.BasePermission):
"""Mixin class for determining if the user has correct permissions."""
def has_permission(self, request, view):
"""Class level permission checks are handled via permissions.IsAuthenticated."""
return True
def has_object_permission(self, request, view, obj):
"""Check if the user has permission to access the imported object."""
# For safe methods (GET, HEAD, OPTIONS), allow access
if request.method in permissions.SAFE_METHODS:
return True
if isinstance(obj, importer.models.DataImportSession):
session = obj
else:
session = getattr(obj, 'session', None)
if session:
if model_class := session.model_class:
return check_user_permission(request.user, model_class, 'change')
return True
class DataImporterPermissionMixin:
"""Mixin class for checking permissions on DataImporter objects."""
# Default permissions: User must be authenticated
permission_classes = [permissions.IsAuthenticated, DataImporterPermission]
class DataImporterModelList(APIView):
@ -44,11 +78,9 @@ class DataImporterModelList(APIView):
return Response(models)
class DataImportSessionList(BulkDeleteMixin, ListCreateAPI):
class DataImportSessionList(DataImporterPermission, BulkDeleteMixin, ListCreateAPI):
"""API endpoint for accessing a list of DataImportSession objects."""
permission_classes = [permissions.IsAuthenticated]
queryset = importer.models.DataImportSession.objects.all()
serializer_class = importer.serializers.DataImportSessionSerializer
@ -59,7 +91,7 @@ class DataImportSessionList(BulkDeleteMixin, ListCreateAPI):
ordering_fields = ['timestamp', 'status', 'model_type']
class DataImportSessionDetail(RetrieveUpdateDestroyAPI):
class DataImportSessionDetail(DataImporterPermission, RetrieveUpdateDestroyAPI):
"""Detail endpoint for a single DataImportSession object."""
queryset = importer.models.DataImportSession.objects.all()
@ -78,13 +110,18 @@ class DataImportSessionAcceptFields(APIView):
"""Accept the field mapping for a DataImportSession."""
session = get_object_or_404(importer.models.DataImportSession, pk=pk)
# Check that the user has permission to accept the field mapping
if model_class := session.model_class:
if not check_user_permission(request.user, model_class, 'change'):
raise PermissionDenied()
# Attempt to accept the mapping (may raise an exception if the mapping is invalid)
session.accept_mapping()
return Response(importer.serializers.DataImportSessionSerializer(session).data)
class DataImportSessionAcceptRows(CreateAPI):
class DataImportSessionAcceptRows(DataImporterPermission, CreateAPI):
"""API endpoint to accept the rows for a DataImportSession."""
queryset = importer.models.DataImportSession.objects.all()
@ -105,7 +142,7 @@ class DataImportSessionAcceptRows(CreateAPI):
return ctx
class DataImportColumnMappingList(ListAPI):
class DataImportColumnMappingList(DataImporterPermissionMixin, ListAPI):
"""API endpoint for accessing a list of DataImportColumnMap objects."""
queryset = importer.models.DataImportColumnMap.objects.all()
@ -116,14 +153,14 @@ class DataImportColumnMappingList(ListAPI):
filterset_fields = ['session']
class DataImportColumnMappingDetail(RetrieveUpdateAPI):
class DataImportColumnMappingDetail(DataImporterPermissionMixin, RetrieveUpdateAPI):
"""Detail endpoint for a single DataImportColumnMap object."""
queryset = importer.models.DataImportColumnMap.objects.all()
serializer_class = importer.serializers.DataImportColumnMapSerializer
class DataImportRowList(BulkDeleteMixin, ListAPI):
class DataImportRowList(DataImporterPermission, BulkDeleteMixin, ListAPI):
"""API endpoint for accessing a list of DataImportRow objects."""
queryset = importer.models.DataImportRow.objects.all()
@ -138,7 +175,7 @@ class DataImportRowList(BulkDeleteMixin, ListAPI):
ordering = 'row_index'
class DataImportRowDetail(RetrieveUpdateDestroyAPI):
class DataImportRowDetail(DataImporterPermission, RetrieveUpdateDestroyAPI):
"""Detail endpoint for a single DataImportRow object."""
queryset = importer.models.DataImportRow.objects.all()

View File

@ -123,6 +123,14 @@ class DataImportSession(models.Model):
return mapping
@property
def model_class(self):
"""Return the model class for this importer."""
serializer = self.serializer_class
if serializer:
return serializer.Meta.model
@property
def serializer_class(self):
"""Return the serializer class for this importer."""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "نقطة نهاية API غير موجودة"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Не е намерена крайна точка на API"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Потребителя няма нужното разрешение, за да вижда този модел"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API endpoint nebyl nalezen"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Uživatel nemá právo zobrazit tento model"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "E-mail"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Chyba při ověření pluginu"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata musí být objekt python dict"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metadata pluginu"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Pole metadat JSON pro použití externími pluginy"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Nesprávně naformátovaný vzor"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Neznámý formát klíče"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Chybí požadovaný klíč"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Referenční pole nemůže být prázdné"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Referenční číslo musí odpovídat požadovanému vzoru"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Referenční číslo je příliš velké"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Duplicitní názvy nemohou existovat pod stejným nadřazeným názvem"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Neplatný výběr"
@ -409,7 +409,7 @@ msgstr "Název"
msgid "Description"
msgstr "Popis"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Popis (volitelně)"
@ -417,35 +417,44 @@ msgstr "Popis (volitelně)"
msgid "Path"
msgstr "Cesta"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Poznámky (volitelné)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Data čárového kódu"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Data čárového kódu třetí strany"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Hash čárového kódu"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Jedinečný hash dat čárového kódu"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Nalezen existující čárový kód"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Chyba serveru"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Server zaznamenal chybu."
@ -519,11 +528,11 @@ msgstr "Nemáte oprávnění měnit tuto uživatelskou roli."
msgid "Only superusers can create new users"
msgstr "Pouze superuživatelé mohou vytvářet nové uživatele"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Váš účet byl vytvořen."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Pro přihlášení použijte funkci obnovení hesla"
@ -535,61 +544,61 @@ msgstr "Vítejte v InvenTree"
msgid "Invalid value"
msgstr "Neplatná hodnota"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Datový soubor"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Vyberte datový soubor k nahrání"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Soubor je příliš velký"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "V souboru nebyly nalezeny žádné sloupce"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "V souboru nebyly nalezeny žádné řádky s daty"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Nebyly zadány žádné řádky s daty"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Nebyly zadány žádné sloupce s daty"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Chybí povinný sloupec: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Duplicitní sloupec: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Vzdálený obraz"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL souboru vzdáleného obrázku"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Stahování obrázků ze vzdálené URL není povoleno"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Nadřazená sestava"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr "Vystavil"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Sestavení musí být zrušeno před odstraněním"
@ -1003,7 +1012,7 @@ msgstr "Instalovat do"
msgid "Destination stock item"
msgstr "Cílová skladová položka"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr "Název dílu"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Zrušeno"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Hotovo"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Zásoby potřebné pro objednávku sestavy"
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Nový {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "Byla vytvořena nová objednávka a přiřazena k vám"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr "{verbose_name} zrušeno"
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr "Objednávka, která je vám přidělena, byla zrušena"
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Čas uzamčení"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Jméno úkolu"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Funkce"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Název funkce"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Argumenty"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Argumenty úlohy"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "Argumenty klíčových slov"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "Argumenty klíčových slov úlohy"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Název souboru"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr "Typ modelu"
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Uživatel nemá oprávnění k vytváření nebo úpravám příloh pro tento model"
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API endpoint ikke fundet"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Bruger har ikke tilladelse til at se denne model"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "E-mail"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata skal være et python dict objekt"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "JSON metadata felt, til brug af eksterne plugins"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Forkert formateret mønster"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Ukendt formatnøgle angivet"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Mangler nødvendig formatnøgle"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Referencefelt må ikke være tomt"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Reference skal matche det påkrævede mønster"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Referencenummer er for stort"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Ugyldigt valg"
@ -409,7 +409,7 @@ msgstr "Navn"
msgid "Description"
msgstr "Beskrivelse"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Beskrivelse (valgfri)"
@ -417,35 +417,44 @@ msgstr "Beskrivelse (valgfri)"
msgid "Path"
msgstr "Sti"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown noter (valgfri)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Stregkode Data"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Tredjeparts stregkode data"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Stregkode Hash"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Unik hash af stregkode data"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Eksisterende stregkode fundet"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Serverfejl"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "En fejl blev logget af serveren."
@ -519,11 +528,11 @@ msgstr "Du har ikke tilladelse til at ændre denne brugerrolle."
msgid "Only superusers can create new users"
msgstr "Kun superbrugere kan oprette nye brugere"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr "Ugyldig værdi"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Datafil"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Vælg datafilen til upload"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Filen er for stor"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Ingen kolonner fundet i fil"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Ingen datarækker fundet i fil"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Ingen data-rækker angivet"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Ingen data-kolonner angivet"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Mangler påkrævet kolonne: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Duplikeret kolonne: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Eksternt billede"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL til ekstern billedfil"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Download af billeder fra ekstern URL er ikke aktiveret"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Overordnet produktion"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Produktion skal anulleres, før den kan slettes"
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Annulleret"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Fuldført"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Filnavn"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Το API endpoint δε βρέθηκε"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Σφάλμα κατά την εκτέλεση επικύρωσης προσθέτου"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Τα μεταδεδομένα πρέπει να είναι ένα αντικείμενο dict python"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Μεταδεδομένα Πρόσθετου"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "JSON πεδίο μεταδεδομένων, για χρήση από εξωτερικά πρόσθετα"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Λανθασμένο μοτίβο"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Δώσατε λάθος μορφή κλειδιού"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Λείπει το απαραίτητο κλειδί"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Το πεδίο δεν μπορεί να είναι άδειο"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Η αναφορά πρέπει να ταιριάζει με το απαιτούμενο μοτίβο"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Διπλότυπα ονόματα δεν μπορούν να υπάρχουν στον ίδιο γονέα"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Μη έγκυρη επιλογή"
@ -409,7 +409,7 @@ msgstr "Όνομα"
msgid "Description"
msgstr "Περιγραφή"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Περιγραφή (προαιρετική)"
@ -417,35 +417,44 @@ msgstr "Περιγραφή (προαιρετική)"
msgid "Path"
msgstr "Μονοπάτι"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Σημειώσεις Markdown (προαιρετικό)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Στοιχεία Barcode"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Δεδομένα barcode τρίτων"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Μοναδικό hash δεδομένων barcode"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Βρέθηκε υπάρχων barcode"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Σφάλμα διακομιστή"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή."
@ -519,11 +528,11 @@ msgstr "Δεν έχετε άδεια να αλλάξετε αυτόν τον ρ
msgid "Only superusers can create new users"
msgstr "Μόνο υπερχρήστες (superusers) μπορούν να δημιουργήσουν νέους χρήστες"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Ο λογαριασμός σας δημιουργήθηκε."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε"
@ -535,61 +544,61 @@ msgstr "Καλώς ήρθατε στο InvenTree"
msgid "Invalid value"
msgstr "Μη έγκυρη τιμή"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Αρχείο Δεδομένων"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Επιλέξτε ένα αρχείο για ανέβασμα"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Το αρχείο είναι πολύ μεγάλο"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Δεν βρέθηκαν στήλες στο αρχείο"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Δεν βρέθηκαν γραμμές δεδομένων στο αρχείο"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Δεν παρασχέθηκαν σειρές δεδομένων"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Δεν δόθηκαν στήλες δεδομένων"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Λείπει απαιτούμενη στήλη: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Διπλή στήλη: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Απομακρυσμένες Εικόνες"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Γονική Κατασκευή"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr "Εκδόθηκε από"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί"
@ -1003,7 +1012,7 @@ msgstr "Εγκατάσταση σε"
msgid "Destination stock item"
msgstr "Αποθήκη προορισμού"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Ακυρώθηκε"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Ολοκληρώθηκε"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Όνομα αρχείου"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -18,23 +18,23 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr ""
@ -345,51 +345,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -410,7 +410,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -418,35 +418,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -520,11 +529,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -536,61 +545,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -623,7 +632,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -636,11 +645,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1004,7 +1013,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1014,15 +1023,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1434,13 +1443,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3392,109 +3401,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3931,59 +3940,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5926,7 +5935,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6345,7 +6354,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6353,31 +6362,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6385,11 +6394,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6499,43 +6508,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6906,38 +6911,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7442,7 +7479,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7486,7 +7523,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7856,11 +7893,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7872,113 +7909,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7990,71 +8027,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "endpoint API no encontrado"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "El usuario no tiene permiso para ver este modelo"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Correo electrónico"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Error al ejecutar la validación del plug-in"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Los metadatos deben ser un objeto diccionario de python"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metadatos del complemento"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Campo de metadatos JSON, para uso por complementos externos"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Patrón con formato incorrecto"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Clave de formato especificado desconocida"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Falta la clave de formato necesaria"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "El campo de servidor no puede estar vacío"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "La referencia debe coincidir con la expresión regular {pattern}"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "El número de referencia es demasiado grande"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Los nombres duplicados no pueden existir bajo el mismo padre"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Selección no válida"
@ -409,7 +409,7 @@ msgstr "Nombre"
msgid "Description"
msgstr "Descripción"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Descripción (opcional)"
@ -417,35 +417,44 @@ msgstr "Descripción (opcional)"
msgid "Path"
msgstr "Ruta"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Notas de Markdown (opcional)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Datos de código de barras"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Datos de código de barras de terceros"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Hash del Código de barras"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Hash único de datos de código de barras"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Código de barras existente encontrado"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Error de servidor"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Se ha registrado un error por el servidor."
@ -519,11 +528,11 @@ msgstr "No tiene permiso para cambiar este rol de usuario."
msgid "Only superusers can create new users"
msgstr "Solo los superusuarios pueden crear nuevos usuarios"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Su cuenta ha sido creada."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión"
@ -535,61 +544,61 @@ msgstr "Bienvenido a InvenTree"
msgid "Invalid value"
msgstr "Valor inválido"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Archivo de datos"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Seleccione el archivo para subir"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "El archivo es demasiado grande"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "No hay columnas en el archivo"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "No hay filas de datos en el archivo"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "No se proporcionaron filas de datos"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "No hay columnas de datos proporcionadas"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Falta la columna requerida: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Columna duplicada: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Imagen remota"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL de imagen remota"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "La descarga de imágenes desde la URL remota no está habilitada"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Construcción o Armado Superior"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr "Asignado a mí"
msgid "Issued By"
msgstr "Emitido por"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr "Asignadas a"
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "La compilación debe cancelarse antes de poder ser eliminada"
@ -1003,7 +1012,7 @@ msgstr "Instalar en"
msgid "Destination stock item"
msgstr "Artículo de stock de destino"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr "Nivel de construcción"
@ -1013,15 +1022,15 @@ msgstr "Nivel de construcción"
msgid "Part Name"
msgstr "Nombre de parte"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr "Etiqueta del código del proyecto"
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr "Crear construcciones hijas"
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr "Generar automáticamente órdenes de construcción hijas"
@ -1433,13 +1442,13 @@ msgstr "En espera"
msgid "Cancelled"
msgstr "Cancelado"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Terminado"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Stock requerido para la orden de construcción"
@ -3391,109 +3400,109 @@ msgstr "Resultado"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Nuevo {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "Se ha creado un nuevo pedido y se le ha asignado"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr "{verbose_name} cancelado"
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Artículos Recibidos"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "Los artículos han sido recibidos contra una orden de compra"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr "Los artículos han sido recibidos contra una orden de devolución"
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr "Error generado por el complemento"
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "Está en ejecución"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Tareas pendientes"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Tareas Programadas"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Tareas fallidas"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "Identificación de Tarea"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "Identificación de tarea única"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Bloquear"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Bloquear hora"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Nombre de la tarea"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Función"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Nombre de la Función"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Argumentos"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Argumentos de la tarea"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "Argumentos de palabra clave"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "Argumentos de palabra clave de tarea"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Nombre de Archivo"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr "Filtros del campo"
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr "Algunos campos requeridos no han sido mapeados"
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr "La columna ya fue mapeada a un campo de la base de datos"
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr "La columna no existe en el archivo de datos"
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr "El campo no existe en el modelo destino"
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr "El campo seleccionado es de solo lectura"
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr "Sesión de importación"
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr "Campo"
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr "Columna"
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr "Número de fila"
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr "Datos de la fila original"
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr "Errores"
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Válido"
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Moneda de compra de ítem de stock"
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr "Ubicación principal"
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr "El número de serie es demasiado grande"
msgid "Parent Item"
msgstr "Elemento padre"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr "Expirado"
msgid "Child Items"
msgstr "Elementos secundarios"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Introduzca el número de artículos de stock para serializar"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Introduzca números de serie para nuevos artículos"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "Ubicación de stock de destino"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Campo de nota opcional"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "Los números de serie no se pueden asignar a esta parte"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Números de serie ya existen"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Añadir nota de transacción (opcional)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr "Sub-ubicación"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "La parte debe ser vendible"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "El artículo está asignado a una orden de venta"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "El artículo está asignado a una orden de creación"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "Cliente para asignar artículos de stock"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "La empresa seleccionada no es un cliente"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "Notas de asignación de stock"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "Debe proporcionarse una lista de artículos de stock"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "Notas de fusión de stock"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr "Permitir proveedores no coincidentes"
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr "Permitir estado no coincidente"
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "Debe proporcionar al menos dos artículos de stock"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr "Sin cambios"
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr "Valor de clave primaria de Stock"
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "Notas de transacción de stock"

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Endpoint de API no encontrado"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "El usuario no tiene permiso para ver este modelo"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Correo electrónico"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Error al ejecutar la validación del plugin"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Los metadatos deben ser un objeto diccionario de python"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metadatos del complemento"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Campo de metadatos JSON, para uso por complementos externos"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Patrón con formato incorrecto"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Clave de formato especificado desconocida"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Falta la clave de formato necesaria"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "El campo de servidor no puede estar vacío"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "La referencia debe coincidir con el patrón requerido"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "El número de referencia es demasiado grande"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Los nombres duplicados no pueden existir bajo el mismo padre"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Selección no válida"
@ -409,7 +409,7 @@ msgstr "Nombre"
msgid "Description"
msgstr "Descripción"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Descripción (opcional)"
@ -417,35 +417,44 @@ msgstr "Descripción (opcional)"
msgid "Path"
msgstr "Ruta"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Notas (opcional)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Datos de código de barras"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Datos de código de barras de terceros"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Hash del Código de barras"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Hash único de datos de código de barras"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Código de barras existente encontrado"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Error de servidor"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Se ha registrado un error por el servidor."
@ -519,11 +528,11 @@ msgstr "No tiene permiso para cambiar este cargo de usuario."
msgid "Only superusers can create new users"
msgstr "Solo los superusuarios pueden crear nuevos usuarios"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Su cuenta ha sido creada."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión"
@ -535,61 +544,61 @@ msgstr "Bienvenido a InvenTree"
msgid "Invalid value"
msgstr "Valor inválido"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Archivo de datos"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Seleccione el archivo para subir"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "El archivo es demasiado grande"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "No hay columnas en el archivo"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "No hay filas de datos en el archivo"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "No se proporcionaron filas de datos"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "No hay columnas de datos para suministrar"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Falta la columna requerida: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Columna duplicada: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Imagen remota"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL de imagen remota"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "La descarga de imágenes desde la URL remota no está habilitada"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Address e API peida nashod"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "فایل‌های داده"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "فایل را برای بارگذاری انتخاب کنید"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "حجم فایل خیلی بزرگ است"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "هیچ ستونی در فایل یافت نشد"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "هیچ ردیف داده ای در فایل یافت نشد"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "هیچ ردیف داده ای ارائه نشده است"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "هیچ ستون داده ای ارائه نشده است"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "ستون مورد نیاز وجود ندارد: \"{name}\""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "ستون تکراری: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "آدرس فایل تصویری از راه دور"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API-rajapintaa ei löydy"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Sähköposti"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metatietojen tulee olla python dict objekti"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Liitännäisen metadata"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "JSON metadatakenttä, ulkoisten liitännäisten käyttöön"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Virheellisesti muotoiltu malli"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Viitekenttä ei voi olla tyhjä"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Viitenumero on liian suuri"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Virheellinen valinta"
@ -409,7 +409,7 @@ msgstr "Nimi"
msgid "Description"
msgstr "Kuvaus"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Kuvaus (valinnainen)"
@ -417,35 +417,44 @@ msgstr "Kuvaus (valinnainen)"
msgid "Path"
msgstr "Polku"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Viivakoodin Tiedot"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Palvelinvirhe"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr "Virheellinen arvo"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Datatiedosto"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Valitse lähetettävä datatiedosto"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Tiedosto on liian suuri"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Datarivejä ei annettu"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Datasarakkeita ei annettu"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Vaadittu sarake puuttuu: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Duplikaatti sarake: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "Kuvatiedoston URL"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Kuvien lataaminen ei ole käytössä"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Peruttu"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Valmis"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Uusi {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Tiedostonimi"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "למשתמש אין הרשאה לצפות במוזל הזה"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "אימייל"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "שגיאה בהפעלת אימות הפלאגין"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata must be a python dict object"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "מטא נתונים של תוסף"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "שדה מטא נתונים של JSON, לשימוש על ידי תוספים חיצוניים"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "דפוס מעוצב בצורה לא נכונה"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "צוין מפתח פורמט לא ידוע"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "חסר מפתח פורמט נדרש"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "שדה הפניה לא יכול להיות ריק"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "הפניה חייבת להתאים לדפוס הנדרש"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "מספר האסמכתה גדול מדי"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "שמות כפולים אינם יכולים להתקיים תחת אותו אב"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "בחירה שגויה"
@ -409,7 +409,7 @@ msgstr "שם"
msgid "Description"
msgstr "תיאור"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "תיאור (לא חובה)"
@ -417,35 +417,44 @@ msgstr "תיאור (לא חובה)"
msgid "Path"
msgstr "נתיב"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "הערות סימון (אופציונלי)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "נתוני ברקוד"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "נתוני ברקוד של צד שלישי"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "ברקוד Hash"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Hash ייחודי של נתוני ברקוד"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "נמצא ברקוד קיים"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "שגיאת שרת"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "נרשמה שגיאה על ידי השרת."
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "מקור הבנייה"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "מבוטל"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "הושלם"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "שם קובץ"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr ""
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "ई-मेल"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API funkciót nem találom"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Nincs jogosultságod az adatok megtekintéséhez"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Email"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Hiba a plugin validálása közben"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "A meta adatnak egy python dict objektumnak kell lennie"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Plugin meta adatok"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "JSON meta adat mező, külső pluginok számára"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Helytelenül formázott minta"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Ismeretlen formátum kulcs lett megadva"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Hiányzó formátum kulcs"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Az azonosító mező nem lehet üres"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Az azonosítónak egyeznie kell a mintával"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Azonosító szám túl nagy"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Érvénytelen választás"
@ -409,7 +409,7 @@ msgstr "Név"
msgid "Description"
msgstr "Leírás"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Leírás (opcionális)"
@ -417,35 +417,44 @@ msgstr "Leírás (opcionális)"
msgid "Path"
msgstr "Elérési út"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown megjegyzések (opcionális)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Vonalkód adat"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Harmadik féltől származó vonalkód adat"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Vonalkód hash"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Egyedi vonalkód hash"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Létező vonalkód"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Kiszolgálóhiba"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "A kiszolgáló egy hibaüzenetet rögzített."
@ -519,11 +528,11 @@ msgstr "Önnek nincs joga változtatni ezen a felhasználói szerepkörön."
msgid "Only superusers can create new users"
msgstr "Csak a superuser-ek hozhatnak létre felhasználókat"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "A fiókod sikeresen létrejött."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Kérlek használd a jelszó visszállítás funkciót a belépéshez"
@ -535,61 +544,61 @@ msgstr "Üdvözlet az InvenTree-ben"
msgid "Invalid value"
msgstr "Érvénytelen érték"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Adat fájl"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Fájl kiválasztása feltöltéshez"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Fájl túl nagy"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Nem találhatók oszlopok a fájlban"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Nincsenek adatsorok a fájlban"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Nincs adatsor megadva"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Nincs adat oszlop megadva"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Szükséges oszlop hiányzik: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Duplikált oszlop: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Távoli kép"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "A távoli kép URL-je"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Képek letöltése távoli URL-ről nem engedélyezett"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Szülő gyártás"
msgid "Include Variants"
msgstr "Változatokkal együtt"
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr "Szülő Gyártás"
@ -635,11 +644,11 @@ msgstr "Hozzám rendelt"
msgid "Issued By"
msgstr "Kiállította"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr "Hozzárendelve"
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "A gyártást be kell fejezni a törlés előtt"
@ -1003,7 +1012,7 @@ msgstr "Beépítés ebbe"
msgid "Destination stock item"
msgstr "Cél készlet tétel"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr "Gyártási Szint"
@ -1013,15 +1022,15 @@ msgstr "Gyártási Szint"
msgid "Part Name"
msgstr "Alkatrész neve"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr "Projekt kód címke"
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr "Leszármazott Gyártások Létrehozása"
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr "Leszármazott Gyártások létrehozása automatikusan"
@ -1435,13 +1444,13 @@ msgstr "Felfüggesztve"
msgid "Cancelled"
msgstr "Törölve"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Kész"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "A gyártási utasításhoz készlet szükséges"
@ -3393,109 +3402,109 @@ msgstr "Eredmény"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Új {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "Egy új megrendelés létrehozva, és hozzád rendelve"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr "{verbose_name} megszakítva"
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr "Egy hozzád rendelt megrendelés megszakítva"
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Készlet érkezett"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "Készlet érkezett egy beszerzési megrendeléshez"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr "Készlet érkezett vissza egy visszavétel miatt"
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr "Plugin hiba"
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "Folyamatban"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Folyamatban lévő feladatok"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Ütemezett Feladatok"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Hibás feladatok"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "Feladat ID"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "Egyedi feladat ID"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Zárol"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Zárolási idő"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Feladat neve"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Funkció"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Funkció neve"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Paraméterek"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Feladat paraméterei"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "Kulcsszó paraméterek"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "Feladat kulcsszó paraméterek"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Fájlnév"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr "Modell típusa"
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr "A felhasználónak nincs joga létrehozni vagy módosítani ehhez a modelhez tartozó mellékleteket"
@ -3932,59 +3941,59 @@ msgstr "Mező Felülbírálás"
msgid "Field Filters"
msgstr "Mező Szűrők"
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr "Néhány kötelező mező nem került hozzárendelésre"
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr "Oszlop már adatbázis mezőhöz lett rendelve"
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr "Adatbázis mező már adatfájl oszlophoz lett rendelve"
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr "Az oszlop összerendelésnek egy helyes importálási művelethez kell kapcsolódnia"
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr "Az Oszlop nem létezik ebben a fájlban"
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr "A mező nem létezik a cél adatszerkezetben"
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr "Kijelölt mező csak olvasható"
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr "Importálási művelet"
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr "Mező"
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr "Oszlop"
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr "Sor száma"
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr "Eredeti sor adat"
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr "Hibák"
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Érvényes"
@ -5927,7 +5936,7 @@ msgstr "Eredmények"
msgid "Number of results recorded against this template"
msgstr "Eszerint a sablon szerint rögzített eredmények száma"
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Beszerzési pénzneme ennek a készlet tételnek"
@ -6346,7 +6355,7 @@ msgstr "Nem található megfelelő beszállítói alkatrész"
msgid "Multiple matching supplier parts found"
msgstr "Több beszállítói alkatrész található"
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6354,31 +6363,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr "Beszállítói alkatrész található"
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr "Ez a termék már bevételezve"
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr "Beszállítói vonalkód nem található"
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr "Több egyező sortétel is található"
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr "Nincs egyező sortétel"
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr "Vonalkód nem egyezik egy létező készlet tétellel sem"
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr "Készlet tétel nem egyezik a sortétellel"
@ -6386,11 +6395,11 @@ msgstr "Készlet tétel nem egyezik a sortétellel"
msgid "Insufficient stock available"
msgstr "Nincs elegendő"
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr "Készlet tétel lefoglalva egy vevői rendeléshez"
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr "Nincs elég információ"
@ -6500,43 +6509,39 @@ msgstr "A címke HTML nyomtatása sikertelen"
msgid "No items provided to print"
msgstr "Nincs elem a nyomtatáshoz"
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6907,38 +6912,70 @@ msgstr "Minta árfolyamváltó plugin"
msgid "InvenTree Contributors"
msgstr "InvenTree fejlesztők"
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7443,7 +7480,7 @@ msgstr "Csúcs készlethelyre szűrés"
msgid "Include sub-locations in filtered results"
msgstr "Szűrt eredmények tartalmazzák az alhelyeket"
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr "Szülő hely"
@ -7487,7 +7524,7 @@ msgstr "A megadott beszállítói alkatrész nem létezik"
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:993
#: stock/api.py:996
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"
@ -7857,11 +7894,11 @@ msgstr "Szériaszám túl nagy"
msgid "Parent Item"
msgstr "Szülő tétel"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr "Szülő készlet tétel"
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr "Csomagolási mennyiség használata: a megadott mennyiség ennyi csomag"
@ -7873,113 +7910,113 @@ msgstr "Lejárt"
msgid "Child Items"
msgstr "Gyermek tételek"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr "Nyilvántartott tételek"
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Készlet tétel beszerzési ára, per darab vagy csomag"
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr "Minimum árazás"
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr "Maximum árazás"
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Add meg hány készlet tételt lássunk el sorozatszámmal"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "A mennyiség nem lépheti túl a rendelkezésre álló készletet ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Írd be a sorozatszámokat az új tételekhez"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "Cél készlet hely"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Opcionális megjegyzés mező"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "A sorozatszámok már léteznek"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "Válaszd ki a beépítésre szánt készlet tételt"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr "Beépítendő mennyiség"
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr "Adja meg a beépítendő mennyiséget"
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Tranzakció megjegyzés hozzáadása (opcionális)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr "A beépítendő mennyiség legalább 1 legyen"
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "Készlet tétel nem elérhető"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr "A beépítendő mennyiség nem haladhatja meg az elérhető mennyiséget"
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr "Cél hely a kiszedett tételeknek"
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr "Nem támogatott statisztikai típus: "
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr "Válassz alkatrészt amire konvertáljuk a készletet"
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz"
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Készlet tétel hozzárendelt beszállítói alkatrésszel nem konvertálható"
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr "Cél hely a visszatérő tételeknek"
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr "Válaszd ki a státuszváltásra szánt készlet tételeket"
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr "Nincs készlet tétel kiválasztva"
@ -7991,71 +8028,71 @@ msgstr "Alhelyek"
msgid "Parent stock location"
msgstr "Felsőbb szintű készlet hely"
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "Az alkatrésznek értékesíthetőnek kell lennie"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "A tétel egy vevő rendeléshez foglalt"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "A tétel egy gyártási utasításhoz foglalt"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "Vevő akihez rendeljük a készlet tételeket"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "A kiválasztott cég nem egy vevő"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "Készlet hozzárendelés megjegyzései"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "A készlet tételek listáját meg kell adni"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "Készlet összevonás megjegyzései"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr "Nem egyező beszállítók megengedése"
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Különböző beszállítói alkatrészekből származó készletek összevonásának engedélyezése"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr "Nem egyező állapotok megjelenítése"
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "Különböző állapotú készletek összevonásának engedélyezése"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "Legalább két készlet tételt meg kell adni"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr "Nincs változás"
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr "Készlet tétel elsődleges kulcs értéke"
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr "Készlet tétel státusz kódja"
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "Készlet tranzakció megjegyzései"

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API endpoint tidak ditemukan"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Pengguna tidak memiliki izin untuk melihat model ini"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Surel"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Pilihan tidak valid"
@ -409,7 +409,7 @@ msgstr "Nama"
msgid "Description"
msgstr "Keterangan"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Keterangan (opsional)"
@ -417,35 +417,44 @@ msgstr "Keterangan (opsional)"
msgid "Path"
msgstr "Direktori"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Data Barcode"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Data barcode pihak ketiga"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Hash unik data barcode"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Sudah ada barcode yang sama"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Terjadi Kesalahan Server"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Sebuah kesalahan telah dicatat oleh server."
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr "Selamat Datang di InvenTree"
msgid "Invalid value"
msgstr "Nilai tidak valid"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "File data"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Pilih file untuk diunggah"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Ukuran file terlalu besar"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Tidak ditemukan kolom dalam file"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Tidak ditemukan barisan data dalam file"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Tidak ada barisan data tersedia"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Tidak ada kolom data tersedia"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Kolom yang diperlukan kurang: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Kolom duplikat: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL file gambar external"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Unduhan gambar dari URL external tidak aktif"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Produksi Induk"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Pesanan harus dibatalkan sebelum dapat dihapus"
@ -1003,7 +1012,7 @@ msgstr "Pasang ke"
msgid "Destination stock item"
msgstr "Tujuan stok item"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Dibatalkan"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Selesai"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Stok dibutuhkan untuk order produksi"
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Barang diterima"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Nama File"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr "Tidak cukup informasi"
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr "Kontributor InvenTree"
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Endpoint API non trovato"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "L'utente non ha i permessi per vedere questo modello"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Email"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Errore nell'eseguire la convalida del plugin"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "I metadati devono essere un oggetto python dict"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metadati Plugin"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Campo di metadati JSON, da utilizzare con plugin esterni"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Schema formattato impropriamente"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Formato chiave sconosciuta"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Formato chiave mancante"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Il campo di riferimento non può essere vuoto"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Il campo deve corrispondere al modello richiesto"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Numero di riferimento troppo grande"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Scelta non valida"
@ -409,7 +409,7 @@ msgstr "Nome"
msgid "Description"
msgstr "Descrizione"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Descrizione (opzionale)"
@ -417,35 +417,44 @@ msgstr "Descrizione (opzionale)"
msgid "Path"
msgstr "Percorso"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Note di Markdown (opzionale)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Dati del Codice a Barre"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Dati Codice a Barre applicazioni di terze parti"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Codice a Barre"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Codice univoco del codice a barre"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Trovato codice a barre esistente"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Errore del server"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Un errore è stato loggato dal server."
@ -519,11 +528,11 @@ msgstr "Non hai i permessi per cambiare il ruolo dell'utente."
msgid "Only superusers can create new users"
msgstr "Solo i superutenti possono creare nuovi utenti"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Il tuo account è stato creato."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Si prega di utilizzare la funzione di reset password per accedere"
@ -535,61 +544,61 @@ msgstr "Benvenuto in InvenTree"
msgid "Invalid value"
msgstr "Valore non valido"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "File dati"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Seleziona un file per il caricamento"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "File troppo grande"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Nessun colonna trovata nel file"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Nessuna riga di dati trovata nel file"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Nessun dato fornito"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Nessuna colonna di dati fornita"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Colonna richiesta mancante: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Colonna duplicata: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Immagine Remota"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL del file immagine remota"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Il download delle immagini da URL remoto non è abilitato"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Produzione Genitore"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr "Inviato da"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "La produzione deve essere annullata prima di poter essere eliminata"
@ -1003,7 +1012,7 @@ msgstr "Installa in"
msgid "Destination stock item"
msgstr "Destinazione articolo in giacenza"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr "Nome Articolo"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Annullato"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Completo"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Giacenza richiesta per l'ordine di produzione"
@ -3391,109 +3400,109 @@ msgstr "Risultato"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Nuovo {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "Un nuovo ordine è stato creato e assegnato a te"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Elemento ricevuto"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "Gli elementi sono stati ricevuti a fronte di un ordine di acquisto"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr "Errore generato dal plugin"
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Nome del file"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Valido"
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Valuta di acquisto di questo articolo in stock"
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr "Scorte insufficienti disponibili"
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
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"
@ -7855,11 +7892,11 @@ msgstr "Il numero di serie è troppo grande"
msgid "Parent Item"
msgstr "Elemento principale"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr "Scaduto"
msgid "Child Items"
msgstr "Elementi secondari"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Inserisci il numero di elementi di magazzino da serializzare"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "La quantità non deve superare la quantità disponibile ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Inserisci i numeri di serie per i nuovi elementi"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "Posizione magazzino di destinazione"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Note opzionali elemento"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "Numeri di serie non possono essere assegnati a questo articolo"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Numeri di serie già esistenti"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "Seleziona elementi di magazzino da installare"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Aggiungi nota di transazione (opzionale)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "Elemento di magazzino non disponibile"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "L'articolo selezionato non è nella Fattura dei Materiali"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr "Posizione di destinazione per gli elementi disinstallati"
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino"
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr "L'articolo selezionato non è una valida opzione per la conversione"
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr "Posizione di destinazione per l'elemento restituito"
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr "Sottoallocazioni"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "L'articolo deve essere vendibile"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "L'elemento è assegnato a un ordine di vendita"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "Elemento assegnato a un ordine di costruzione"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "Cliente a cui assegnare elementi di magazzino"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "L'azienda selezionata non è un cliente"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "Note sull'assegnazione delle scorte"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "Deve essere fornito un elenco degli elementi di magazzino"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "Note di fusione di magazzino"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr "Consenti fornitori non corrispondenti"
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Consenti di unire gli elementi di magazzino che hanno fornitori diversi"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr "Consenti stato non corrispondente"
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "Consenti di unire gli elementi di magazzino con diversi codici di stato"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "Devono essere riforniti almeno due elementi in magazzino"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr "Valore di chiave primaria StockItem"
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "Note sugli spostamenti di magazzino"

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "APIエンドポイントが見つかりません"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "ユーザーにこのモデルを表示する権限がありません"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "メールアドレス"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "プラグインメタデータ"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "外部プラグインで使用するためのJSONメタデータフィールド"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "無効な選択です"
@ -409,7 +409,7 @@ msgstr "お名前"
msgid "Description"
msgstr "説明"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "説明 (オプション)"
@ -417,35 +417,44 @@ msgstr "説明 (オプション)"
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "マークダウンメモ (オプション)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "バーコード情報"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "サードパーティ製バーコードデータ"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr "このユーザのロールを変更する権限がありません"
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr "無効な値です。"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "データファイル"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "アップロードするファイルを選択"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "ファイルサイズが大きすぎます"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "ファイルに列が見つかりません"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "ファイルにデータ行がみつかりません"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "データが入力されていません"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "データ列が指定されていません"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "必須の列がありません: {name}"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "{col} 列が重複しています。"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "外部画像ファイルのURL"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "外部URLからの画像ダウンロードは許可されていません"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "キャンセル済"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "完了"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "ファイル名"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr "シリアル番号が大きすぎます"
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr "期限切れ"
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "シリアル番号が既に存在します"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "パーツは販売可能でなければなりません"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr ""
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr ""
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API galapunkts nav atrasts"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API eindpunt niet gevonden"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr "Ongeldige items lijst verstrekt"
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr "Ongeldige filters opgegeven"
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr "Geen items gevonden om te verwijderen"
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Gebruiker heeft geen rechten om dit model te bekijken"
@ -344,51 +344,51 @@ msgstr "Log in op de app"
msgid "Email"
msgstr "E-mail"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Fout bij uitvoeren plug-in validatie"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata moeten een python dict object zijn"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Plug-in metadata"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "JSON metadata veld, voor gebruik door externe plugins"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Onjuist opgemaakt patroon"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Onbekende opmaaksleutel gespecificeerd"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Vereiste opmaaksleutel ontbreekt"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Referentieveld mag niet leeg zijn"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Referentie moet overeenkomen met verplicht patroon"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Referentienummer is te groot"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Ongeldige keuze"
@ -409,7 +409,7 @@ msgstr "Naam"
msgid "Description"
msgstr "Omschrijving"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Omschrijving (optioneel)"
@ -417,35 +417,44 @@ msgstr "Omschrijving (optioneel)"
msgid "Path"
msgstr "Pad"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown notitie (optioneel)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Streepjescode gegevens"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Streepjescode van derden"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Hash van Streepjescode"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Unieke hash van barcode gegevens"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Bestaande barcode gevonden"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Serverfout"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Er is een fout gelogd door de server."
@ -519,11 +528,11 @@ msgstr "Je bent niet bevoegd om deze gebruikersrol te wijzigen."
msgid "Only superusers can create new users"
msgstr "Alleen administrators kunnen nieuwe gebruikers aanmaken"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Je account is aangemaakt."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Gebruik de wachtwoordreset functie om in te loggen"
@ -535,61 +544,61 @@ msgstr "Welkom bij InvenTree"
msgid "Invalid value"
msgstr "Ongeldige waarde"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Data bestand"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Selecteer een bestand om te uploaden"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr "Bestandsformaat niet ondersteund"
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Bestand is te groot"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Geen kolommen gevonden in het bestand"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Geen data rijen gevonden in dit bestand"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Geen data rijen opgegeven"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Geen gegevenskolommen opgegeven"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Verplichte kolom ontbreekt: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Dubbele kolom: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Externe afbeelding"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL van extern afbeeldingsbestand"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr "Fout bij het downloaden van afbeelding van externe URL"
@ -622,7 +631,7 @@ msgstr "Bovenliggende Productie"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr "Voorouderlijke bouw"
@ -635,11 +644,11 @@ msgstr "Toegewezen aan mij"
msgid "Issued By"
msgstr "Uitgegeven door"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr "Toegewezen aan"
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd"
@ -1003,7 +1012,7 @@ msgstr "Installeren in"
msgid "Destination stock item"
msgstr "Bestemming voorraadartikel"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr "Onderdeel naam"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Geannuleerd"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Voltooid"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Voorraad vereist voor productieorder"
@ -3391,109 +3400,109 @@ msgstr "Resultaat"
msgid "Was the barcode scan successful?"
msgstr "Was de barcode succesvol gescand?"
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Nieuw: {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "Een nieuwe order is aangemaakt en aan u toegewezen"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "Artikelen zijn ontvangen tegen een inkooporder"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Bestandsnaam"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Inkooporder voor dit voorraadartikel"
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr "Geen overeenkomende plug-in gevonden voor barcode gegevens"
@ -6352,31 +6361,31 @@ msgstr "Geen overeenkomende plug-in gevonden voor barcode gegevens"
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr "Geen verkooporder opgegeven"
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr "Streepjescode komt niet overeen met een bestaand voorraadartikel"
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr "Voorraad item komt niet overeen met regelitem"
@ -6384,11 +6393,11 @@ msgstr "Voorraad item komt niet overeen met regelitem"
msgid "Insufficient stock available"
msgstr "Onvoldoende voorraad beschikbaar"
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr "Voorraad item toegewezen aan verkooporder"
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
msgstr "Plug-in sleutel"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr "Paneel naam"
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr "Paneel titel"
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr "Paneel icoon"
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr "Paneel inhoud (HTML)"
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr "Paneel Context (JSON)"
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr "Paneel bron (javascript)"
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr "Kenmerk type"
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr "Feature opties"
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr "Feature bron (javascript)"
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr "Onderdeel panelen inschakelen"
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr "Schakel aangepaste panelen in voor deelweergave"
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr "Schakel order panelen in"
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr "Schakel aangepaste panelen in voor inkooporders"
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr "Kapotte panelen inschakelen"
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr "Schakel defecte panelen in voor testen"
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr "Dynamisch paneel inschakelen"
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr "Activeer dynamische panelen om te testen"
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr "Bron bestand"
@ -7441,7 +7478,7 @@ msgstr "Filter op topniveau locaties"
msgid "Include sub-locations in filtered results"
msgstr "Inclusief sublocaties in gefilterde resultaten"
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr "Bovenliggende locatie"
@ -7485,7 +7522,7 @@ msgstr "Het opgegeven leveranciers onderdeel bestaat niet"
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:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Serienummers kunnen niet worden meegeleverd voor een niet traceerbaar onderdeel"
@ -7855,11 +7892,11 @@ msgstr "Serienummer is te groot"
msgid "Parent Item"
msgstr "Bovenliggend Item"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr "Bovenliggende voorraad item"
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr "Gebruik pakketgrootte bij het toevoegen: de hoeveelheid gedefinieerd is het aantal pakketten"
@ -7871,113 +7908,113 @@ msgstr "Verlopen"
msgid "Child Items"
msgstr "Onderliggende items"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr "Items volgen"
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Inkoopprijs van dit voorraadartikel, per eenheid of pakket"
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr "Minimale prijs"
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr "Maximum prijs"
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Aantal voorraaditems om serienummers voor te maken"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Voer serienummers voor nieuwe items in"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "Locatie van bestemming"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Optioneel notities veld"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "Serienummers kunnen niet worden toegewezen aan dit deel"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Serienummers bestaan al"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "Selecteer voorraaditem om te installeren"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr "Te installeren hoeveelheid"
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr "Voer de te installeren hoeveelheid items in"
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Transactienotitie toevoegen (optioneel)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr "Te installeren hoeveelheid moet minimaal 1 zijn"
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "Voorraadartikel is niet beschikbaar"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "Het geselecteerde deel zit niet in de materialen lijst"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr "De te installeren hoeveelheid mag niet groter zijn dan de beschikbare hoeveelheid"
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr "Bestemmingslocatie voor verwijderd item"
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr "Sublocaties"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "Artikel is toegewezen aan een verkooporder"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "Artikel is toegewezen aan een productieorder"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API-endepunkt ikke funnet"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Brukeren har ikke rettigheter til å se denne modellen"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "E-post"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Feil under validering av utvidelse"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata må være et python dict-objekt"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Utvidelse-metadata"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "JSON-metadatafelt, for bruk av eksterne utvidelser"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Uriktig formatert mønster"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Ukjent formatnøkkel spesifisert"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Mangler nødvendig formatnøkkel"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Referansefeltet kan ikke være tomt"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Referansen må samsvare påkrevd mønster"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Referansenummeret er for stort"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Duplikatnavn kan ikke eksistere under samme overordnede"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Ugyldig valg"
@ -409,7 +409,7 @@ msgstr "Navn"
msgid "Description"
msgstr "Beskrivelse"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Beskrivelse (valgfritt)"
@ -417,35 +417,44 @@ msgstr "Beskrivelse (valgfritt)"
msgid "Path"
msgstr "Sti"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown-notater (valgfritt)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Strekkodedata"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Tredjeparts strekkodedata"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Strekkode-hash"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Unik hash av strekkodedata"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Eksisterende strekkode funnet"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Serverfeil"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "En feil har blitt logget av serveren."
@ -519,11 +528,11 @@ msgstr "Du har ikke tillatelse til å endre denne brukerrollen."
msgid "Only superusers can create new users"
msgstr "Bare superbrukere kan opprette nye brukere"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Din konto er opprettet."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn"
@ -535,61 +544,61 @@ msgstr "Velkommen til InvenTree"
msgid "Invalid value"
msgstr "Ugyldig verdi"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Datafil"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Velg datafil for opplasting"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Filen er for stor"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Ingen kolonner funnet i filen"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Ingen datarader funnet i fil"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Ingen datarader oppgitt"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Ingen datakolonner angitt"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Mangler påkrevd kolonne: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Dupliaktkolonne: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Eksternt bilde"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URLtil ekstern bildefil"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Overordnet produksjon"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr "Utstedt av"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Produksjonen må avbrytes før den kan slettes"
@ -1003,7 +1012,7 @@ msgstr "Monteres i"
msgid "Destination stock item"
msgstr "Lagervare for montering"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr "Delnavn"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr "Etikett for prosjektkode"
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Kansellert"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Fullført"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Lagerbeholdning kreves for produksjonsordre"
@ -3391,109 +3400,109 @@ msgstr "Resultat"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Ny {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "En ny ordre har blitt opprettet og tilordnet til deg"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr "{verbose_name} kansellert"
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr "En ordre som er tildelt til deg ble kansellert"
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Artikler mottatt"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "Artikler har blitt mottatt mot en innkjøpsordre"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr "Artikler har blitt mottatt mot en returordre"
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr "Feil oppstått i utvidelse"
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "Kjører"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Ventende oppgaver"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Planlagte oppgaver"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Mislykkede oppgaver"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "Oppgave-ID"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "Unik oppgave-ID"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Lås"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Låsetidspunkt"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Oppgavenavn"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Funksjon"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Funksjonsnavn"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Argumenter"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Oppgaveargumenter"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "Nøkkelordargumenter"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "Nøkkelordargumenter for oppgave"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Filnavn"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr "Modelltype"
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Brukeren har ikke tillatelse tillatelse å opprette eller endre vedlegg for denne modellen"
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Gyldig"
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Innkjøpsvaluta for lagervaren"
@ -6344,7 +6353,7 @@ msgstr "Finner ingen matchende leverandørdeler"
msgid "Multiple matching supplier parts found"
msgstr "Flere samsvarende leverandørdeler funnet"
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr "Fant leverandørdel"
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr "Artikkelen er allerede mottatt"
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr "Ingen treff for leverandørstrekkode"
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr "Flere samsvarende elementer funnet"
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr "Ingen samsvarende element funnet"
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr "Strekkoden samsvarer ikke med eksisterende lagervare"
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr "Lagervare samsvarer ikke med linjeelement"
@ -6384,11 +6393,11 @@ msgstr "Lagervare samsvarer ikke med linjeelement"
msgid "Insufficient stock available"
msgstr "Utilstrekkelig lagerbeholdning"
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr "Lagervaren er tildelt en salgsordre"
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr "Ikke nok informasjon"
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr "Eksempel valutakonverterings-utvidelse"
msgid "InvenTree Contributors"
msgstr "InvenTree-bidragsytere"
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr "Oppgitt leverandørdel eksisterer ikke"
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:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Serienumre kan ikke angis for en ikke-sporbar del"
@ -7855,11 +7892,11 @@ msgstr "Serienummeret er for høyt"
msgid "Parent Item"
msgstr "Overodnet element"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr "Bruk pakningsstørrelse når du legger til: antall definert er antall pakker"
@ -7871,113 +7908,113 @@ msgstr "Utløpt"
msgid "Child Items"
msgstr "Underordnede artikler"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning"
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Angi antall lagervarer som skal serialiseres"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Angi serienummer for nye artikler"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "Til Lagerplassering"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Valgfritt notatfelt"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "Serienummer kan ikke tilordnes denne delen"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Seriernummer eksisterer allerede"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "Velg lagervare å montere"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr "Antall å installere"
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr "Angi antallet elementer som skal installeres"
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Legg til transaksjonsnotat (valgfritt)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr "Antall å installere må være minst 1"
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "Lagervaren er utilgjengelig"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "Valgt del er ikke i stykklisten"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr "Antall å installere må ikke overskride tilgjengelig antall"
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr "Lagerplassering for den avinstallerte artikkelen"
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr "Velg del å konvertere lagervare til"
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr "Valgt del er ikke et gyldig alternativ for konvertering"
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel"
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr "Lagerplassering for returnert artikkel"
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr "Velg lagervarer for å endre status"
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr "Ingen lagervarer valgt"
@ -7989,71 +8026,71 @@ msgstr "Underplasseringer"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "Delen må være salgbar"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "Artikkelen er tildelt en salgsordre"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "Artikkelen er tildelt en produksjonsordre"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "Kunde å tilordne lagervarer"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "Valgt firma er ikke en kunde"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "Lagervare-tildelignsnotater"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "En liste av lagervarer må oppgis"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "Notater om lagersammenslåing"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr "Tillat forskjellige leverandører"
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr "Tillat forskjellig status"
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "Minst to lagervarer må oppgis"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr "Lagervare primærnøkkel verdi"
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr "Lagervare statuskode"
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "Lager transaksjonsnotater"

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Nie znaleziono punktu końcowego API"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Adres E-Mail"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Błąd podczas walidacji wtyczki"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadane muszą być obiektem typu dict w Python"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Wtyczka Metadane"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Pole metadanych JSON, do użycia przez wtyczki zewnętrzne"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Nieprawidłowo sformatowany wzór"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Określono nieznany format klucza"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Brak wymaganego formatu klucza"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Pole odniesienia nie może być puste"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Odniesienie musi być zgodne z wymaganym wzorem"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Numer odniesienia jest zbyt duży"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Duplikaty nazw nie mogą istnieć pod tym samym rodzicem"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Błędny wybór"
@ -409,7 +409,7 @@ msgstr "Nazwa"
msgid "Description"
msgstr "Opis"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Opis (opcjonalny)"
@ -417,35 +417,44 @@ msgstr "Opis (opcjonalny)"
msgid "Path"
msgstr "Ścieżka"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Notatki Markdown (opcjonalne)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Dane kodu kreskowego"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Dane kodu kreskowego stron trzecich"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Hasz kodu kreskowego"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Unikalny hasz danych kodu kreskowego"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Znaleziono istniejący kod kreskowy"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Błąd serwera"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Błąd został zapisany w logach serwera."
@ -519,11 +528,11 @@ msgstr "Nie masz uprawnień do zmiany tej roli użytkownika."
msgid "Only superusers can create new users"
msgstr "Tylko superużytkownicy mogą tworzyć nowych użytkowników"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Twoje konto zostało utworzone."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Zresetuj hasło"
@ -535,61 +544,61 @@ msgstr "Witamy w InvenTree"
msgid "Invalid value"
msgstr "Nieprawidłowa wartość"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Plik danych"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Wybierz plik danych do przesłania"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Plik jest zbyt duży"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Nie znaleziono kolumn w pliku"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Nie znaleziono wierszy danych w pliku"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Nie podano wierszy danych"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Nie podano kolumn danych"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Brakuje wymaganej kolumny: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Zduplikowana kolumna: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Obrazek zewnętrzny"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "Adres URL zdalnego pliku obrazu"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Budowa nadrzędna"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr "Dodane przez"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta"
@ -1003,7 +1012,7 @@ msgstr "Zainstaluj do"
msgid "Destination stock item"
msgstr "Docelowa lokalizacja magazynowa przedmiotu"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr "Nazwa komponentu"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1122,7 +1131,7 @@ msgstr ""
#: order/models.py:2185 order/serializers.py:769 stock/admin.py:165
#: stock/serializers.py:1046 stock/serializers.py:1587
msgid "Status"
msgstr ""
msgstr "Status"
#: build/serializers.py:582
msgid "Accept Incomplete Allocation"
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Anulowano"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Zakończono"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr "Wynik"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "Jest uruchomiony"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Oczekujce zadania"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Zaplanowane zadania"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Zadania zakończone błędem"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "ID zadania"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "Unikalny identyfikator zadania"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Blokada"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Czas blokady"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Nazwa zadania"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Funkcja"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Nazwa funkcji"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Argumenty"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Argumenty zadania"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Nazwa pliku"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Ważny"
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Waluta zakupu tego towaru"
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr "Brak dopasowania dla kodu kreskowego dostawcy"
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr "Kod kreskowy nie pasuje do istniejących pozycji magazynowych"
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr "Element nadrzędny"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr "Termin minął"
msgid "Child Items"
msgstr "Elementy podrzędne"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Numer seryjny już istnieje"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr "Podlokalizacje"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "Część musi być dostępna do sprzedaży"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API endpoint não encontrado"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Usuário não tem permissão para ver este modelo"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Email"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Erro ao executar validação do plugin"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadados deve ser um objeto dict python"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metadados da Extensão"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Campo de metadados JSON, para uso por extensões externas"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Padrão formatado incorretamente"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Chave de formato desconhecida especificada"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Chave de formato obrigatória ausente"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "O campo de referência não pode ficar vazio"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "A referência deve corresponder ao padrão exigido"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "O número de referência é muito grande"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Nomes duplicados não podem existir sob o mesmo parental"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Escolha inválida"
@ -409,7 +409,7 @@ msgstr "Nome"
msgid "Description"
msgstr "Descrição"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Descrição (opcional)"
@ -417,35 +417,44 @@ msgstr "Descrição (opcional)"
msgid "Path"
msgstr "Caminho"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Notas Markdown (opcional)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Dados de código de barras"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Dados de código de barras de terceiros"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Hash de código de barras"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Hash exclusivo de dados de código de barras"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Código de barras existente encontrado"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Erro de servidor"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Log de erro salvo pelo servidor."
@ -519,11 +528,11 @@ msgstr "Não tem permissões para alterar este papel do usuário."
msgid "Only superusers can create new users"
msgstr "Apenas superusuários podem criar novos usuários"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Sua conta foi criada."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Por favor, use a função de redefinir senha para acessar"
@ -535,61 +544,61 @@ msgstr "Bem-vindo(a) ao InvenTree"
msgid "Invalid value"
msgstr "Valor inválido"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Arquivo de dados"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Selecione um arquivo de dados para enviar"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "O arquivo é muito grande"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Nenhuma coluna encontrada no arquivo"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Nenhuma linha de dados encontrada no arquivo"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Nenhuma linha de dados fornecida"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Nenhuma coluna de dados fornecida"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Falta a coluna obrigatória: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Coluna duplicada: \"{col}\""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Imagens Remota"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL do arquivo de imagem remoto"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Baixar imagens de URL remota não está habilitado"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Produção Progenitor"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr "Emitido por"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Produção deve ser cancelada antes de ser deletada"
@ -1003,7 +1012,7 @@ msgstr "Instalar em"
msgid "Destination stock item"
msgstr "Destino do Item do Estoque"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr "Nome da Peça"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Cancelado"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Completado"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Estoque obrigatório para o pedido de produção"
@ -3391,109 +3400,109 @@ msgstr "Resultado"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Novo {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "Um novo pedido foi criado e atribuído a você"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr "{verbose_name} cancelado"
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr "Um pedido atribuído a você foi cancelado"
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Itens Recebidos"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "Os itens de um pedido de compra foram recebidos"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr "Os itens de um pedido de devolução foram recebidos"
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr "Erro criado pela extensão"
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "Executando"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Tarefas Pendentes"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Tarefas Agendadas"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Tarefas com Falhas"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "ID da Tarefa"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "ID Único da Tarefa"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Bloquear"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Tempo de bloqueio"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Nome da tarefa"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Função"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Nome da função"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Argumentos"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Argumentos da tarefa"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "Argumentos de Palavra-chave"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "Argumentos Palavra-chave da Tarefa"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Nome do arquivo"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Válido"
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Moeda de compra deste item de estoque"
@ -6344,7 +6353,7 @@ msgstr "Nenhuma peça de fornecedor correspondente encontrada"
msgid "Multiple matching supplier parts found"
msgstr "Múltiplas peças de fornecedores correspondentes encontradas"
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr "Peça de fornecedor correspondente"
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr "Item do pedido já foi recebido"
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr "Nenhuma correspondência para o código de barras do fornecedor"
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr "Diversos itens de linha correspondentes encontrados"
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr "Nenhum item de linha correspondente encontrado"
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr "Código de barras não corresponde a item de estoque válido"
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr "Item do estoque não corresponde ao item de linha"
@ -6384,11 +6393,11 @@ msgstr "Item do estoque não corresponde ao item de linha"
msgid "Insufficient stock available"
msgstr "Estoque insuficiente disponível"
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr "Item de estoque atribuído para pedido de venda"
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr "Não há informação suficiente"
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr "Plugin de Câmbio de exemplo"
msgid "InvenTree Contributors"
msgstr "Contribuidores do InvenTree"
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr "A peça do fornecedor informado não existe"
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:993
#: stock/api.py:996
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"
@ -7855,11 +7892,11 @@ msgstr "Número de série é muito grande"
msgid "Parent Item"
msgstr "Item Primário"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr "Usar tamanho do pacote ao adicionar: a quantidade definida é o número de pacotes"
@ -7871,113 +7908,113 @@ msgstr "Expirado"
msgid "Child Items"
msgstr "Itens Filhos"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Preço de compra para este item de estoque, por unidade ou pacote"
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Insira o número de itens de estoque para serializar"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Quantidade não deve exceder a quantidade disponível em estoque ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Inserir número de série para novos itens"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "Local de destino do estoque"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Campo opcional de notas"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "Números de série não podem ser atribuídos a esta peça"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Números de série já existem"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "Selecione o item de estoque para instalar"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr "Quantidade a Instalar"
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr "Insira a quantidade de itens a instalar"
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Adicionar nota de transação (opcional)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr "A quantidade para instalar deve ser pelo menos 1"
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "Item de estoque indisponível"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "Peça selecionada não está na Lista de Materiais"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr "Quantidade a instalar não deve exceder a quantidade disponível"
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr "Local de destino para o item desinstalado"
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr "Selecione peça para converter o item de estoque em"
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr "Peça selecionada não é uma opção válida para conversão"
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Não é possível converter o item de estoque com a Peça de Fornecedor atribuída"
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr "Local de destino para item retornado"
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr "Selecionar itens de estoque para mudar estados"
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr "Nenhum item de estoque selecionado"
@ -7989,71 +8026,71 @@ msgstr "Sub-locais"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "Parte deve ser comercializável"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "Item é alocado para um pedido de venda"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "Item está alocado a um pedido de produção"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "Cliente para atribuir itens de estoque"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "A empresa selecionada não é um cliente"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "Nodas atribuídas a estoque"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "Uma lista de item de estoque deve ser providenciada"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "Notas de fusão de estoque"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr "Permitir fornecedores divergentes"
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Permitir a fusão de itens de estoque de fornecedores diferentes"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr "Permitir estado incompatível"
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "Permitir a fusão de itens de estoque com estado diferentes"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "Ao menos dois itens de estoque devem ser providenciados"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr "Valor da chave primária do Item Estoque"
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr "Código de estado do item estoque"
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "Notas da transação de estoque"

File diff suppressed because it is too large Load Diff

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr ""
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Конечная точка API не обнаружена"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "У пользователя недостаточно прав для просмотра этой модели!"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "EMail"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Ошибка запуска проверки плагина"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Метаданные должны быть объектом python dict"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Метаданные плагина"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Поле метаданных JSON для использования внешними плагинами"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Неправильно отформатированный шаблон"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Указан неизвестный ключ формата"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Отсутствует требуемый ключ формата"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Ссылочный идентификатор не может быть пустым"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Ссылка должна соответствовать шаблону {pattern}"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Номер ссылки слишком большой"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Повторяющиеся имена не могут существовать под одним и тем же родителем"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Неверный выбор"
@ -409,7 +409,7 @@ msgstr "Название"
msgid "Description"
msgstr "Описание"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Описание (необязательно)"
@ -417,35 +417,44 @@ msgstr "Описание (необязательно)"
msgid "Path"
msgstr "Путь"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Записи о скидке (необязательно)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Данные штрих-кода"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Данные стороннего штрих-кода"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Хэш штрих-кода"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Уникальный хэш данных штрих-кода"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Обнаружен существующий штрих-код"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Ошибка сервера"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Сервер зарегистрировал ошибку."
@ -519,11 +528,11 @@ msgstr "У вас недостаточно прав для изменения р
msgid "Only superusers can create new users"
msgstr "Только суперпользователи могут создавать новых пользователей"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Ваша учётная запись была успешно создана."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Пожалуйста, используйте функцию сброса пароля для входа"
@ -535,61 +544,61 @@ msgstr "Добро пожаловать в InvenTree"
msgid "Invalid value"
msgstr "Неверное значение"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Файл данных"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Выберите файл данных для загрузки"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Файл слишком большой"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Столбцы в файле не найдены"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Строки данных в файле не найдены"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Строки данных в файле не найдены"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Столбцы данных не предоставлены"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Отсутствует обязательный столбец: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Повторяющийся столбец: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Удаленное изображение"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "ССЫЛКА файла изображения на удаленном сервере"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Загрузка изображений с удаленного URL-адреса не включена"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Родительский заказ на производство"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr "Назначено мне"
msgid "Issued By"
msgstr "Создано"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Заказ на производство должен быть отменен перед удалением"
@ -1003,7 +1012,7 @@ msgstr "Установить в"
msgid "Destination stock item"
msgstr "Целевая складская позиция"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr "Наименование детали"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr "Название кода проекта"
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr "На удержании"
msgid "Cancelled"
msgstr "Отменено"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Готово"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Необходимый запас для заказа на производство"
@ -3391,109 +3400,109 @@ msgstr "Результат"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Полученные элементы"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "Запущен"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Ожидающие задачи"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Запланированные задания"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Невыполненные Задачи"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "Код задачи"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "Уникальный ID задачи"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Заблокировать"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Время блокировки"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Название задачи"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Функция"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Имя функции"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Аргументы"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Аргументы задачи"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Имя файла"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr "Сопоставление столбцов должно быть связано с корректным сеансом импорта"
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr "Номер строки"
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr "Ошибки"
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Корректный"
@ -5925,7 +5934,7 @@ msgstr "Результаты"
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Валюта закупки складской позиции"
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr "Штрих-код не соответствует существующим складским позициям"
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr "Складская позиция не соответствует позиции"
@ -6384,11 +6393,11 @@ msgstr "Складская позиция не соответствует поз
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr "Складская позиция зарезервирована заказом на продажу"
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr "Родительский элемент"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr "Просрочен"
msgid "Child Items"
msgstr "Дочерние элементы"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку"
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Введите количество складских позиций для сериализации"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Введите серийные номера для новых элементов"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Опциональное поле записей"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Серийные номера уже существуют"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "Выберите складскую позицию для установки"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Добавить запись к транзакции (необязательно)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "Складская позиция недоступна"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "Выбранная деталь отсутствует в спецификации"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr "Выберите деталь в которую будет преобразована складская позиция"
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика"
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr "Выберите складские позиции для изменения статуса"
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr "Не выбрано ни одной складской позиции"
@ -7989,71 +8026,71 @@ msgstr "Места хранения"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "Элемент зарезервирован для заказа на производство"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "Покупатель для назначения складских позиций"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "Выбранная компания не является покупателем"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "Записи о назначенных запасах"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "Необходимо предоставить список складских позиций"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "Записи о слияниях запасов"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Разрешить слияние складских позиций с различными поставщиками"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "Разрешить слияние складских позиций с различными статусами"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "Необходимо предоставить как минимум 2 складские позиции"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr "Нет изменений"
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr "Статус складской позиции"
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "Записи о перемещениях запасов"

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr ""
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API vmesnik ni najden"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Uporabnik nima dovoljenja pogleda tega modela"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "E-pošta"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Napaka pri izvajanju preverjanja vtičnika"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metapodatki morajo biti objekt tipa python dict"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metapodatki vtičnika"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Polje metapodatkov JSON za uporabo pri zunanjih vtičnikih"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Nepravilno nastavljen vzorec"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Nastavljen neprepoznan ključ formata"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Manjka obvezen ključ formata"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Referenčno polje ne sme biti prazno"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Referenca se mora ujemati s vzorcem"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Referenčna številka prevelika"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Podvojena imena ne morejo obstajati pod istim nadrejenim elementom"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Nedovoljena izbira"
@ -409,7 +409,7 @@ msgstr "Ime"
msgid "Description"
msgstr "Opis"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Opis (opcijsko)"
@ -417,35 +417,44 @@ msgstr "Opis (opcijsko)"
msgid "Path"
msgstr "Pot"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown opombe (neobvezno)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Podatki čtrne kode"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Podatki črtne kode tretje osebe"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Oznaka črtne kode"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Enolična oznaka podatkov črtne kode"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Črtna koda že obstaja"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Napaka strežnika"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Zaznana napaka na strežniku."
@ -519,11 +528,11 @@ msgstr "Nimate dovoljenja za spreminjanje vloge tega uporabnika."
msgid "Only superusers can create new users"
msgstr "Samo superuporabniki lahko ustvarijo nove uporabnike"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Vaš račun je bil ustvarjen."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Za prijavo uporabite funkcijo ponastavitve gesla"
@ -535,61 +544,61 @@ msgstr "Dobrodošli v InvenTree"
msgid "Invalid value"
msgstr "Neveljavna vrednost"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Podatki datoteke"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Izberite datoteke za naložiti"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Datoteka je prevelika"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "V datoteki ni bilo najdenih stolpcev"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "V datoteki ni bilo njadenih vrstic"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Niso bile podane vrste s podatki"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Niso bili podani stolpci s podatki"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Manjka obvezni stolpec: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Dvojni stolpec: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Oddaljena slika"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "Povezava do oddaljene slike"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Prenos slik iz oddaljene povezave ni omogočen"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Nadrejena izgradnja"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana"
@ -1003,7 +1012,7 @@ msgstr "Inštaliraj v"
msgid "Destination stock item"
msgstr "Destinacija postavke zaloge"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Preklicano"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Končano"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Ime datoteke"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API krajnja tačka nije pronađena"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Korisnik nema dozvolu za pregled ovog modela"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "E-Pošta"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metapodaci moraju biti \"python dict\" objekat"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metapodaci dodatka"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Polje metapodataka JSON, za korištenje eksternih dodataka"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Neispravno formatiran obrazac"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Naveden je ključ nepoznatog formata"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Nedostaje potreban ključ formata"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Polje za reference ne može biti prazno"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Referenca mora odgovarati traženom obrascu"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Broj reference je predugačak"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Dvostruka imena ne mogu postojati pod istom nadredjenom grupom"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Nevažeći izvor"
@ -409,7 +409,7 @@ msgstr "Ime"
msgid "Description"
msgstr "Opis"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Opis (Opciono)"
@ -417,35 +417,44 @@ msgstr "Opis (Opciono)"
msgid "Path"
msgstr "Putanja"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Zabeleške (Opciono)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Podaci sa barkoda"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Podaci sa barkoda trećih lica"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Heš barkoda"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Jedinstveni hash barkoda"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Postojeći barkod pronađen"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Greška servera"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Server je zabležio grešku."
@ -519,11 +528,11 @@ msgstr "Nemate dozvolu za promenu ove korisničke uloge."
msgid "Only superusers can create new users"
msgstr "Samo superkorisnici mogu kreirati nove korisnike"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr "Nevažeća vrednost"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Datoteka"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Odaberite datoteku za učitavanje"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Prevelika datoteka"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Nisu pronađene kolone podataka u datoteci"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Nisu pronađeni redovi podataka u datoteci"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Nisu navedeni redovi podataka"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Nisu obezbeđene kolone podataka"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Nedostaje potrebna kolona: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Duplicirana kolona: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Udaljena slika"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL udaljene slike"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Otkazano"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Gotovo"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Ime datoteke"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API-slutpunkt hittades inte"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Användaren har inte behörighet att se denna modell"
@ -128,7 +128,7 @@ msgstr "Serienummret finns redan"
#: InvenTree/helpers.py:643 InvenTree/helpers.py:662
#, python-brace-format
msgid "Invalid group: {group}"
msgstr ""
msgstr "Ogiltig grupp: {group}"
#: InvenTree/helpers.py:606
#, python-brace-format
@ -337,58 +337,58 @@ msgstr "Kinesiska (Traditionell)"
#: InvenTree/magic_login.py:28
msgid "Log in to the app"
msgstr ""
msgstr "Logga in på appen"
#: InvenTree/magic_login.py:38 InvenTree/serializers.py:416
#: company/models.py:133
msgid "Email"
msgstr "E-postadress"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Fel vid validering av plugin"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata måste vara ett python dict objekt"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Metadata för plugin"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "JSON metadata fält, för användning av externa plugins"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Felaktigt formaterat mönster"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Okänd formatnyckel angiven"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Obligatorisk formatnyckel saknas"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Textfältet kan inte lämnas tomt"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Referensen måste matcha obligatoriskt mönster"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Referensnumret är för stort"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Ogiltigt val"
@ -409,7 +409,7 @@ msgstr "Namn"
msgid "Description"
msgstr "Beskrivning"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Beskrivning (valfritt)"
@ -417,35 +417,44 @@ msgstr "Beskrivning (valfritt)"
msgid "Path"
msgstr "Sökväg"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown anteckningar (valfritt)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Streckkodsdata"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Tredje parts streckkodsdata"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Streckkodsdata"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Unik hash med streckkodsdata"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Befintlig streckkod hittades"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Serverfel"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Ett fel har loggats av servern."
@ -519,11 +528,11 @@ msgstr "Du har inte behörighet att ändra denna användarrollen."
msgid "Only superusers can create new users"
msgstr "Endast superanvändare kan skapa nya användare"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Ditt konto har skapats."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Använd funktionen för lösenordsåterställning för att logga in"
@ -535,61 +544,61 @@ msgstr "Välkommen till InvenTree"
msgid "Invalid value"
msgstr "Ogiltigt värde"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Datafil"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Välj fil för uppladdning"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Filen är för stor"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Inga kolumner hittades i filen"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Inga rader hittades i filen"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Inga rader angivna"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Inga datakolumner har angetts"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Saknar obligatorisk kolumn: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Duplicerad kolumn: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Fjärransluten bild"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL för fjärrbildsfil"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Föregående tillverkning"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr "Utfärdad av"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Tillverkningen måste avbrytas innan den kan tas bort"
@ -1003,7 +1012,7 @@ msgstr "Installera till"
msgid "Destination stock item"
msgstr "Destination lagervara"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "Avbruten"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Slutför"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Schemalagda uppgifter"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Filnamn"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr "Fält"
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr "Kolumn"
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "ไม่พบ API endpoint"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr ""
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "อีเมล"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "ข้อมูลเมตาของปลั๊กอิน"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr "ชื่อ"
msgid "Description"
msgstr "คำอธิบาย"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr ""
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "ข้อมูลบาร์โค้ด"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "บาร์โค้ดนี้มีในระบบแล้ว"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr "ยินดีต้อนรับเข้าสู่ Inventree"
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "ไฟล์ข้อมูล"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "เลือกไฟล์ข้อมูลที่จะอัปโหลด"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "ไฟล์มีขนาดใหญ่เกินไป"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr "ยกเลิกแล้ว"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "สำเร็จแล้ว"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "ชื่อไฟล์"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API uç noktası bulunamadı"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "Kullanıcının bu modeli görüntüleme izni yok"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "E-posta"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Eklenti doğrulama sırasında hata oluştu"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata, bir python dict nesnesi olmalıdır"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Plugin Metaverileri"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Harici eklentiler tarafından kullanım için JSON metadata alanı"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Yanlış biçimlendirilmiş desen"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Belirtilen bilinmeyen format anahtarı"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Gerekli format anahtarı eksik"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Referans alanı boş olamaz"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Referans sayısı çok fazla"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Geçersiz seçim"
@ -409,7 +409,7 @@ msgstr "Adı"
msgid "Description"
msgstr "Açıklama"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Açıklama (isteğe bağlı)"
@ -417,35 +417,44 @@ msgstr "Açıklama (isteğe bağlı)"
msgid "Path"
msgstr "Yol"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown notları (isteğe bağlı)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Barkod Verisi"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Üçüncü parti barkod verisi"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Barkod Hash"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Barkod verisinin benzersiz hash'i"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Var olan barkod bulundu"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Sunucu Hatası"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Bir hafta sunucu tarafından kayıt edildi."
@ -519,11 +528,11 @@ msgstr "Bu kullanıcı rolünü değiştirmek için izniniz yok."
msgid "Only superusers can create new users"
msgstr "Sadece süper kullanıcılar yeni kullanıcı oluşturabilir"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Kullanıcı hesabınız oluşturulmuştur."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız"
@ -535,61 +544,61 @@ msgstr "InvenTree'ye Hoşgeldiniz"
msgid "Invalid value"
msgstr "Geçersiz değer"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Veri Dosyası"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Yüklemek istediğiniz dosyayı seçin"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Dosya boyutu çok büyük"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Dosyada kolon bulunamadı"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Dosyada satır bulunamadı"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Dosyada satır bulunamadı"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Dosyada uygun kolon bulunamadı"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Gerekli kolon ismi eksik:'{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Tekrarlanan kolon ismi:'{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Uzaktan Görüntüler"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "Uzaktan görüntü dosya URL'si"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Uzak URL'den resim indirmek etkinleştirilmedi"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Üst Yapım İşi"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr "Ata Yapım"
@ -635,11 +644,11 @@ msgstr "Bana atandı"
msgid "Issued By"
msgstr "Veren"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr "Atanılan Kişi"
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Yapımın silinebilmesi için önce iptal edilmesi gerekir"
@ -1003,7 +1012,7 @@ msgstr "Kurulduğu yer"
msgid "Destination stock item"
msgstr "Hedef stok kalemi"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr "Yapım Düzeyi"
@ -1013,15 +1022,15 @@ msgstr "Yapım Düzeyi"
msgid "Part Name"
msgstr "Parça Adı"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr "Proje Kodu Etiketi"
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr "Alt Yapımlar Oluştur"
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr "Alt yapım siparişlerini otomatik olarak -üret"
@ -1433,13 +1442,13 @@ msgstr "Beklemede"
msgid "Cancelled"
msgstr "İptal edildi"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Tamamlandı"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Yapım siparişi için gereken stok"
@ -2371,15 +2380,15 @@ msgstr "Şifreyi unuttumu etkinleştir"
#: common/models.py:1952
msgid "Enable password forgot function on the login pages"
msgstr ""
msgstr "Giriş yapma sayfasında şifremi unuttum işlevini etkinleştir"
#: common/models.py:1957
msgid "Enable registration"
msgstr ""
msgstr "Kayıt olmayı etkinleştir"
#: common/models.py:1958
msgid "Enable self-registration for users on the login pages"
msgstr ""
msgstr "Giriş yapma sayfalarında kullanıcılar için kendini kaydetme işlevini etkinleştir"
#: common/models.py:1963
msgid "Enable SSO"
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Bekleyen Görevler"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Planlanan Görevler"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Başarısız Görevler"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "Görev ID"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "Benzersiz Görev ID"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Kilit"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Kilit Zamanı"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Görev Adı"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Fonksiyon"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Fonksiyon Adı"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Argümanlar"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Görev Argümanları"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "Anahtar Argümanlar"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "Anahtar görev argümanları"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Dosya adı"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr "Model Tipi"
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Seri numaraları zaten mevcut"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "İşlem notu ekle (isteğe bağlı)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr "Alt konumlar"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "Кінцева точка API не знайдена"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "У користувача немає дозволу на перегляд цієї моделі"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr ""
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr ""
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr ""
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr ""
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr ""
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr ""
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr ""
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr ""
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr ""
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr ""
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr ""
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr ""
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Description"
msgstr ""
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr ""
@ -417,35 +417,44 @@ msgstr ""
msgid "Path"
msgstr "Шлях"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr ""
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr ""
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr ""
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr ""
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr ""
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr ""
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr ""
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr ""
@ -519,11 +528,11 @@ msgstr ""
msgid "Only superusers can create new users"
msgstr ""
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr ""
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr ""
@ -535,61 +544,61 @@ msgstr ""
msgid "Invalid value"
msgstr ""
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr ""
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr ""
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr ""
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr ""
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr ""
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr ""
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr ""
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr ""
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr ""
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr ""
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr ""
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr ""
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr ""
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr ""
@ -635,11 +644,11 @@ msgstr ""
msgid "Issued By"
msgstr ""
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr ""
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr ""
@ -1003,7 +1012,7 @@ msgstr ""
msgid "Destination stock item"
msgstr ""
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr ""
@ -1013,15 +1022,15 @@ msgstr ""
msgid "Part Name"
msgstr ""
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr ""
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr ""
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr ""
@ -1433,13 +1442,13 @@ msgstr ""
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr ""
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr ""
@ -3391,109 +3400,109 @@ msgstr ""
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr ""
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr ""
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr ""
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr ""
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr ""
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr ""
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr ""
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr ""
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr ""
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr ""
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr ""
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr ""
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr ""
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr ""
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr ""
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr ""
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr ""
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr ""
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr ""
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr ""
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr ""
@ -6344,7 +6353,7 @@ msgstr ""
msgid "Multiple matching supplier parts found"
msgstr ""
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr ""
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr ""
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr ""
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr ""
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr ""
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr ""
msgid "InvenTree Contributors"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr ""
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
@ -7855,11 +7892,11 @@ msgstr ""
msgid "Parent Item"
msgstr ""
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr ""
@ -7871,113 +7908,113 @@ msgstr ""
msgid "Child Items"
msgstr ""
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr ""
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr ""
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr ""
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr ""
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr ""
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr ""
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr ""
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr ""
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr ""
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr ""
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr ""
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr ""
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr ""
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr ""
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr ""
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr ""
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr ""
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr ""
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr ""
@ -7989,71 +8026,71 @@ msgstr ""
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr ""
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr ""
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr ""
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr ""
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr ""
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr ""
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr ""
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr ""
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr ""
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr ""
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr ""
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr ""
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr ""
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr ""
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr ""

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "API endpoint không tồn tại"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr ""
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr ""
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr ""
#: InvenTree/api.py:514
#: InvenTree/api.py:518
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"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "Email"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "Lỗi xác thực plugin"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Siêu dữ liệu phải là đối tượng từ điển của python"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "Phụ trợ siêu dữ liệu"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "Trường siêu dữ liệu JSON, được sử dụng bởi phụ trợ bên ngoài"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "Mẫu được định dạng không thích hợp"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "Khóa định dạng không rõ ràng đã được chỉ định"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "Thiếu khóa định dạng cần thiết"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "Trường tham chiếu không thể rỗng"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "Tham chiếu phải phù hợp với mẫu yêu cầu"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "Số tham chiếu quá lớn"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "Tên trùng lặp không thể tồn tại trong cùng cấp thư mục"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "Lựa chọn sai"
@ -409,7 +409,7 @@ msgstr "Tên"
msgid "Description"
msgstr "Mô tả"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "Mô tả (tùy chọn)"
@ -417,35 +417,44 @@ msgstr "Mô tả (tùy chọn)"
msgid "Path"
msgstr "Đường dẫn"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Ghi chú markdown (không bắt buộc)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "Dữ liệu mã vạch"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "Dữ liệu mã vạch của bên thứ ba"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "Dữ liệu băm mã vạch"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "Chuỗi băm duy nhất của dữ liệu mã vạch"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "Mã vạch đã tồn tại"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "Lỗi máy chủ"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "Lỗi đã được ghi lại bởi máy chủ."
@ -519,11 +528,11 @@ msgstr "Bạn không có quyền thay đổi vai trò của người dùng này.
msgid "Only superusers can create new users"
msgstr "Chỉ có siêu người dùng là có thể tạo người dùng mới"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "Tài khoản của bạn đã được tạo."
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "Xin hãy sử dụng chức năng tạo lại mật khẩu để đăng nhập"
@ -535,61 +544,61 @@ msgstr "Chào mừng đến với InvenTree"
msgid "Invalid value"
msgstr "Giá trị không hợp lệ"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "Tập tin dữ liệu"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "Chọn tệp tin để tải lên"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "Tệp tin quá lớn"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "Không tìm thấy cột nào trong tệp tin"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "Không tìm thấy dòng nào trong tệp tin"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "Chưa có dữ liệu"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "Chưa cung cấp cột dữ liệu"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "Thiếu cột bắt buộc: '{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "Nhân bản cột: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "Hình ảnh từ xa"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "URL của tệp hình ảnh bên ngoài"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "Chức năng tải hình ảnh từ URL bên ngoài không được bật"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr ""
@ -622,7 +631,7 @@ msgstr "Phiên bản cha"
msgid "Include Variants"
msgstr ""
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr "Xây dựng nguồn gốc"
@ -635,11 +644,11 @@ msgstr "Đã gán cho tôi"
msgid "Issued By"
msgstr "Phát hành bởi"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr "Đã gán cho"
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "Bạn dựng phải được hủy bỏ trước khi có thể xóa được"
@ -1003,7 +1012,7 @@ msgstr "Cài đặt vào"
msgid "Destination stock item"
msgstr "Kho hàng đích"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr "Tạo cấp"
@ -1013,15 +1022,15 @@ msgstr "Tạo cấp"
msgid "Part Name"
msgstr "Tên sản phẩm"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr "Nhãn mã dự án"
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr "Tạo mới bản dựng con"
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr "Tự động tạo đơn hàng con"
@ -1433,13 +1442,13 @@ msgstr "Chờ"
msgid "Cancelled"
msgstr "Đã hủy"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "Hoàn thành"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "Kho được yêu cầu cho đặt hàng bản dựng"
@ -3391,109 +3400,109 @@ msgstr "Kết quả"
msgid "Was the barcode scan successful?"
msgstr ""
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "Mới {verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "Một đơn đặt hàng mới đã được tạo và phân công cho bạn"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr "{verbose_name} đã bị hủy"
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr "Một đơn đặt từng được phân công cho bạn đã bị hủy bỏ"
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "Mục đã nhận"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "Hàng đã được nhận theo đơn đặt mua"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr "Hàng đã nhận theo đơn hàng trả lại"
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr "Lỗi được thông báo bởi phần mở rộng"
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "Đang chạy"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "Công việc chờ xử lý"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "Tác vụ theo lịch"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "Tác vụ thất bại"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "ID tác vụ"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "ID tác vụ duy nhất"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "Khoá"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "Thời gian khóa"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "Tên công việc"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "Chức năng"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "Tên chức năng"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "Đối số"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "Đối số công việc"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "Đối số từ khóa"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "Đối số từ khóa công việc"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "Tên tập tin"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr ""
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
@ -3930,59 +3939,59 @@ msgstr ""
msgid "Field Filters"
msgstr ""
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr ""
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr ""
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr ""
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr ""
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr ""
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr ""
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr ""
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr ""
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr ""
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr ""
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr ""
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr ""
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr ""
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "Hợp lệ"
@ -5925,7 +5934,7 @@ msgstr ""
msgid "Number of results recorded against this template"
msgstr ""
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "Loại tiền mua hàng của hàng hóa này"
@ -6344,7 +6353,7 @@ msgstr "Không tìm thấy sản phẩm nhà cung cấp phù hợp"
msgid "Multiple matching supplier parts found"
msgstr "Tìm thấy nhiều sản phẩm nhà cung cấp phù hợp"
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr ""
@ -6352,31 +6361,31 @@ msgstr ""
msgid "Matched supplier part"
msgstr "Sản phẩm nhà cung cấp phù hợp"
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr "Hàng hóa này đã được nhận"
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr "Không phù hợp với mã vạch nhà cung cấp"
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr ""
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr ""
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr ""
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr ""
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr ""
@ -6384,11 +6393,11 @@ msgstr ""
msgid "Insufficient stock available"
msgstr "Kho không đủ hạn mức khả dụng"
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr ""
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr "Không đủ thông tin"
@ -6498,43 +6507,39 @@ msgstr ""
msgid "No items provided to print"
msgstr ""
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr ""
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr ""
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr ""
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr ""
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr ""
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr ""
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr ""
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr ""
@ -6905,38 +6910,70 @@ msgstr "Phần bổ sung trao đổi tiền tệ mẫu"
msgid "InvenTree Contributors"
msgstr "Người đóng góp InvenTree"
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr ""
msgid "Include sub-locations in filtered results"
msgstr ""
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr ""
@ -7485,7 +7522,7 @@ msgstr "Sản phẩm nhà cung cấp đã đưa không tồn tại"
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:993
#: stock/api.py:996
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"
@ -7855,11 +7892,11 @@ msgstr "Số sêri quá lớn"
msgid "Parent Item"
msgstr "Mục cha"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr ""
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr "Sử dụng kích thước đóng gói khi thêm: Số lượng được định nghĩa là số của gói"
@ -7871,113 +7908,113 @@ msgstr "Đã hết hạn"
msgid "Child Items"
msgstr "Mục con"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr ""
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Giá mua của mặt hàng, theo đơn vị hoặc gói"
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr ""
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr ""
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "Nhập số của mặt hàng cần tạo số nối tiếp"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Số lượng phải không vượt quá số lượng trong kho đang có ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "Điền số sêri cho hàng hóa mới"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "Vị trí kho đích"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "Trường ghi chú tùy chọn"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "Không thể gán số sêri cho sản phẩm này"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "Số sêri đã tồn tại"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "Chọn mặt hàng để lắp đặt"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr "Số lượng để cài đặt"
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr "Nhập số lượng hàng hóa để cài đặt"
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "Thêm ghi chú giao dịch (tùy chọn)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr "Số lượng cần cài đặt phải ít nhất là 1"
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "Mặt hàng không khả dụng"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "Sản phẩm đã chọn không có trong hóa đơn vật liệu"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr "Số lượng cần lắp đặt phải không vượt quá số lượng đang có"
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ"
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr ""
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr "Chọn sản phẩm để chuyển đổi mặt hàng vào bên trong"
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr "Sản phẩm đã chọn không phải là tùy chọn hợp lệ để chuyển đổi"
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Không thể chuyển đổi hàng hóa với sản phẩm nhà cung cấp đã gán"
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr "Vị trí đích dành cho hàng hóa trả lại"
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr "Chọn mặt hàng để đổi trạng thái"
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr "Không có mặt hàng nào được chọn"
@ -7989,71 +8026,71 @@ msgstr "Kho phụ"
msgid "Parent stock location"
msgstr ""
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "Sản phẩm phải có thể bán được"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "Hàng hóa được phân bổ đến một đơn hàng bán"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "Hàng hóa được phân bổ đến một đơn đặt bản dựng"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "Khách hàng được gán vào các mặt hàng"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "Công ty đã chọn không phải là khách hàng"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "Ghi chú phân bổ kho"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "Phải cung cấp danh sách mặt hàng"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "Ghi chú gộp kho"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr "Cho phép nhiều nhà cung không khớp"
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Cho phép mặt hàng cùng sản phẩm nhà cung cấp khác phải được gộp"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr "Cho phép trạng thái không khớp"
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "Cho phép mặt hàng với mã trạng thái khác nhau để gộp lại"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "Cần cung cấp ít nhất hai mặt hàng"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr ""
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr "Giá trị khóa chính mặt hàng"
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr "Mã trạng thái mặt hàng"
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "Ghi chú giao dịch kho"

File diff suppressed because it is too large Load Diff

View File

@ -17,23 +17,23 @@ msgstr ""
"X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 250\n"
#: InvenTree/api.py:269
#: InvenTree/api.py:273
msgid "API endpoint not found"
msgstr "未找到 API 端點"
#: InvenTree/api.py:386
#: InvenTree/api.py:390
msgid "Invalid items list provided"
msgstr "提供了無效的單位"
#: InvenTree/api.py:395
#: InvenTree/api.py:399
msgid "Invalid filters provided"
msgstr "提供了無效的過濾器"
#: InvenTree/api.py:400
#: InvenTree/api.py:404
msgid "No items found to delete"
msgstr "未找到要刪除的項目"
#: InvenTree/api.py:514
#: InvenTree/api.py:518
msgid "User does not have permission to view this model"
msgstr "用户沒有權限查閲當前模型。"
@ -344,51 +344,51 @@ msgstr ""
msgid "Email"
msgstr "電子郵件"
#: InvenTree/models.py:103
#: InvenTree/models.py:105
msgid "Error running plugin validation"
msgstr "驗證外掛程式時發生錯誤"
#: InvenTree/models.py:172
#: InvenTree/models.py:174
msgid "Metadata must be a python dict object"
msgstr "Metadata必須是一個Python Dictionary物件"
#: InvenTree/models.py:178
#: InvenTree/models.py:180
msgid "Plugin Metadata"
msgstr "外掛程式Metadata"
#: InvenTree/models.py:179
#: InvenTree/models.py:181
msgid "JSON metadata field, for use by external plugins"
msgstr "外掛程式使用的JSON Metadata欄位"
#: InvenTree/models.py:406
#: InvenTree/models.py:408
msgid "Improperly formatted pattern"
msgstr "格式錯誤"
#: InvenTree/models.py:413
#: InvenTree/models.py:415
msgid "Unknown format key specified"
msgstr "指定了不明的格式鍵值"
#: InvenTree/models.py:419
#: InvenTree/models.py:421
msgid "Missing required format key"
msgstr "缺少必須的格式鍵值"
#: InvenTree/models.py:430
#: InvenTree/models.py:432
msgid "Reference field cannot be empty"
msgstr "參考欄位不能空白"
#: InvenTree/models.py:438
#: InvenTree/models.py:440
msgid "Reference must match required pattern"
msgstr "參考欄位並須符合格式"
#: InvenTree/models.py:469
#: InvenTree/models.py:471
msgid "Reference number is too large"
msgstr "參考編號過大"
#: InvenTree/models.py:720
#: InvenTree/models.py:722
msgid "Duplicate names cannot exist under the same parent"
msgstr "同一個上層元件下不能有重複的名字"
#: InvenTree/models.py:737
#: InvenTree/models.py:739
msgid "Invalid choice"
msgstr "無效的選項"
@ -409,7 +409,7 @@ msgstr "名稱"
msgid "Description"
msgstr "描述"
#: InvenTree/models.py:774 stock/models.py:90
#: InvenTree/models.py:776 stock/models.py:90
msgid "Description (optional)"
msgstr "描述(選填)"
@ -417,35 +417,44 @@ msgstr "描述(選填)"
msgid "Path"
msgstr "路徑"
#: InvenTree/models.py:926
#: InvenTree/models.py:928
msgid "Markdown notes (optional)"
msgstr "Markdown 註記(選填)"
#: InvenTree/models.py:957
#: InvenTree/models.py:959
msgid "Barcode Data"
msgstr "條碼資料"
#: InvenTree/models.py:958
#: InvenTree/models.py:960
msgid "Third party barcode data"
msgstr "第三方條碼資料"
#: InvenTree/models.py:964
#: InvenTree/models.py:966
msgid "Barcode Hash"
msgstr "條碼雜湊值"
#: InvenTree/models.py:965
#: InvenTree/models.py:967
msgid "Unique hash of barcode data"
msgstr "條碼資料的唯一雜湊值"
#: InvenTree/models.py:1032
#: InvenTree/models.py:1034
msgid "Existing barcode found"
msgstr "發現現有條碼"
#: InvenTree/models.py:1075
#: InvenTree/models.py:1112
msgid "Task Failure"
msgstr ""
#: InvenTree/models.py:1114
#, python-brace-format
msgid "Background worker task '{instance.func}' failed after {n} attempts"
msgstr ""
#: InvenTree/models.py:1142
msgid "Server Error"
msgstr "伺服器錯誤"
#: InvenTree/models.py:1076
#: InvenTree/models.py:1143
msgid "An error has been logged by the server."
msgstr "伺服器紀錄了一個錯誤。"
@ -519,11 +528,11 @@ msgstr "您沒有更改這個使用者角色的權限"
msgid "Only superusers can create new users"
msgstr "只有管理員帳户可以建立新的使用者"
#: InvenTree/serializers.py:522
#: InvenTree/serializers.py:523
msgid "Your account has been created."
msgstr "您的帳號已經建立完成。"
#: InvenTree/serializers.py:524
#: InvenTree/serializers.py:525
msgid "Please use the password reset function to login"
msgstr "請使用重設密碼功能來登入"
@ -535,61 +544,61 @@ msgstr "歡迎使用 InvenTree"
msgid "Invalid value"
msgstr "無效值"
#: InvenTree/serializers.py:609 importer/models.py:64
#: InvenTree/serializers.py:614 importer/models.py:64
msgid "Data File"
msgstr "數據文件"
#: InvenTree/serializers.py:610
#: InvenTree/serializers.py:615
msgid "Select data file for upload"
msgstr "選擇要上傳的數據文件"
#: InvenTree/serializers.py:627 common/files.py:63
#: InvenTree/serializers.py:632 common/files.py:63
msgid "Unsupported file format"
msgstr ""
#: InvenTree/serializers.py:633
#: InvenTree/serializers.py:638
msgid "File is too large"
msgstr "文件過大"
#: InvenTree/serializers.py:654
#: InvenTree/serializers.py:659
msgid "No columns found in file"
msgstr "在文件中沒有找到列"
#: InvenTree/serializers.py:657
#: InvenTree/serializers.py:662
msgid "No data rows found in file"
msgstr "在文件中沒有找到數據行"
#: InvenTree/serializers.py:769
#: InvenTree/serializers.py:774
msgid "No data rows provided"
msgstr "沒有提供數據行"
#: InvenTree/serializers.py:772
#: InvenTree/serializers.py:777
msgid "No data columns supplied"
msgstr "沒有提供數據列"
#: InvenTree/serializers.py:838
#: InvenTree/serializers.py:843
#, python-brace-format
msgid "Missing required column: '{name}'"
msgstr "缺少必需的列:'{name}'"
#: InvenTree/serializers.py:847
#: InvenTree/serializers.py:852
#, python-brace-format
msgid "Duplicate column: '{col}'"
msgstr "重複列: '{col}'"
#: InvenTree/serializers.py:886
#: InvenTree/serializers.py:891
msgid "Remote Image"
msgstr "遠程圖片"
#: InvenTree/serializers.py:887
#: InvenTree/serializers.py:892
msgid "URL of remote image file"
msgstr "遠程圖片文件的 URL"
#: InvenTree/serializers.py:905
#: InvenTree/serializers.py:910
msgid "Downloading images from remote URL is not enabled"
msgstr "未啓用從遠程 URL下載圖片"
#: InvenTree/serializers.py:912
#: InvenTree/serializers.py:917
msgid "Failed to download image from remote URL"
msgstr "從遠程URL下載圖像失敗"
@ -622,7 +631,7 @@ msgstr "上層生產工單"
msgid "Include Variants"
msgstr "包含變體"
#: build/api.py:90
#: build/api.py:93
msgid "Ancestor Build"
msgstr "可測試部分"
@ -635,11 +644,11 @@ msgstr "分配給我"
msgid "Issued By"
msgstr "發佈者"
#: build/api.py:145
#: build/api.py:148
msgid "Assigned To"
msgstr "負責人"
#: build/api.py:307
#: build/api.py:310
msgid "Build must be cancelled before it can be deleted"
msgstr "工單必須被取消才能被刪除"
@ -1003,7 +1012,7 @@ msgstr "安裝到"
msgid "Destination stock item"
msgstr "目的庫存品項"
#: build/serializers.py:107
#: build/serializers.py:108
msgid "Build Level"
msgstr "構建等級"
@ -1013,15 +1022,15 @@ msgstr "構建等級"
msgid "Part Name"
msgstr "零件名稱"
#: build/serializers.py:127
#: build/serializers.py:128
msgid "Project Code Label"
msgstr "項目編碼標籤"
#: build/serializers.py:133
#: build/serializers.py:134
msgid "Create Child Builds"
msgstr "新建子生產項目"
#: build/serializers.py:134
#: build/serializers.py:135
msgid "Automatically generate child build orders"
msgstr "自動生成子生成工單"
@ -1433,13 +1442,13 @@ msgstr "被掛起"
msgid "Cancelled"
msgstr "已取消"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:510
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:518
#: importer/status_codes.py:27 order/status_codes.py:15
#: order/status_codes.py:52 order/status_codes.py:83 report/models.py:451
msgid "Complete"
msgstr "完成"
#: build/tasks.py:180
#: build/tasks.py:184
msgid "Stock required for build order"
msgstr "生產訂單所需庫存"
@ -3391,109 +3400,109 @@ msgstr "結果"
msgid "Was the barcode scan successful?"
msgstr "條碼掃描成功嗎?"
#: common/notifications.py:310
#: common/notifications.py:328
#, python-brace-format
msgid "New {verbose_name}"
msgstr "新建{verbose_name}"
#: common/notifications.py:312
#: common/notifications.py:330
msgid "A new order has been created and assigned to you"
msgstr "新訂單已創建並分配給您"
#: common/notifications.py:318
#: common/notifications.py:336
#, python-brace-format
msgid "{verbose_name} canceled"
msgstr "{verbose_name} 已取消"
#: common/notifications.py:320
#: common/notifications.py:338
msgid "A order that is assigned to you was canceled"
msgstr "分配給您的訂單已取消"
#: common/notifications.py:326 common/notifications.py:333 order/api.py:438
#: common/notifications.py:344 common/notifications.py:351 order/api.py:440
msgid "Items Received"
msgstr "收到的物品"
#: common/notifications.py:328
#: common/notifications.py:346
msgid "Items have been received against a purchase order"
msgstr "已根據採購訂單收到物品"
#: common/notifications.py:335
#: common/notifications.py:353
msgid "Items have been received against a return order"
msgstr "已收到退貨訂單中的物品"
#: common/notifications.py:453
#: common/notifications.py:475
msgid "Error raised by plugin"
msgstr "插件引發的錯誤"
#: common/serializers.py:418
#: common/serializers.py:423
msgid "Is Running"
msgstr "正在運行"
#: common/serializers.py:424
#: common/serializers.py:429
msgid "Pending Tasks"
msgstr "等待完成的任務"
#: common/serializers.py:430
#: common/serializers.py:435
msgid "Scheduled Tasks"
msgstr "預定的任務"
#: common/serializers.py:436
#: common/serializers.py:441
msgid "Failed Tasks"
msgstr "失敗的任務"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Task ID"
msgstr "任務ID"
#: common/serializers.py:451
#: common/serializers.py:456
msgid "Unique task ID"
msgstr "唯一任務ID"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock"
msgstr "鎖定"
#: common/serializers.py:453
#: common/serializers.py:458
msgid "Lock time"
msgstr "鎖定時間"
#: common/serializers.py:455
#: common/serializers.py:460
msgid "Task name"
msgstr "任務名稱"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function"
msgstr "功能"
#: common/serializers.py:457
#: common/serializers.py:462
msgid "Function name"
msgstr "功能名稱"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Arguments"
msgstr "參數"
#: common/serializers.py:459
#: common/serializers.py:464
msgid "Task arguments"
msgstr "任務參數"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Keyword Arguments"
msgstr "關鍵字參數"
#: common/serializers.py:462
#: common/serializers.py:467
msgid "Task keyword arguments"
msgstr "任務關鍵詞參數"
#: common/serializers.py:572
#: common/serializers.py:577
msgid "Filename"
msgstr "檔案名稱"
#: common/serializers.py:579 report/api.py:100 report/serializers.py:54
#: common/serializers.py:584 report/api.py:100 report/serializers.py:54
msgid "Model Type"
msgstr "模型類型"
#: common/serializers.py:607
#: common/serializers.py:612
msgid "User does not have permission to create or edit attachments for this model"
msgstr "用户無權為此模式創建或編輯附件"
@ -3930,59 +3939,59 @@ msgstr "字段覆蓋"
msgid "Field Filters"
msgstr "字段篩選器"
#: importer/models.py:231
#: importer/models.py:239
msgid "Some required fields have not been mapped"
msgstr "某些必填字段尚未映射"
#: importer/models.py:388
#: importer/models.py:396
msgid "Column is already mapped to a database field"
msgstr "列已映射到數據庫字段"
#: importer/models.py:393
#: importer/models.py:401
msgid "Field is already mapped to a data column"
msgstr "字段已映射到數據列"
#: importer/models.py:402
#: importer/models.py:410
msgid "Column mapping must be linked to a valid import session"
msgstr "列映射必須鏈接到有效的導入會話"
#: importer/models.py:407
#: importer/models.py:415
msgid "Column does not exist in the data file"
msgstr "數據文件中不存在列"
#: importer/models.py:414
#: importer/models.py:422
msgid "Field does not exist in the target model"
msgstr "目標模型中不存在字段"
#: importer/models.py:418
#: importer/models.py:426
msgid "Selected field is read-only"
msgstr "所選字段為只讀"
#: importer/models.py:423 importer/models.py:494
#: importer/models.py:431 importer/models.py:502
msgid "Import Session"
msgstr "導入會話"
#: importer/models.py:427
#: importer/models.py:435
msgid "Field"
msgstr "字段"
#: importer/models.py:429
#: importer/models.py:437
msgid "Column"
msgstr "列"
#: importer/models.py:498
#: importer/models.py:506
msgid "Row Index"
msgstr "行索引"
#: importer/models.py:501
#: importer/models.py:509
msgid "Original row data"
msgstr "原始行數據"
#: importer/models.py:506 machine/models.py:110
#: importer/models.py:514 machine/models.py:110
msgid "Errors"
msgstr "錯誤"
#: importer/models.py:508 part/api.py:857
#: importer/models.py:516 part/api.py:857
msgid "Valid"
msgstr "有效"
@ -5925,7 +5934,7 @@ msgstr "結果"
msgid "Number of results recorded against this template"
msgstr "根據該模板記錄的結果數量"
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:630
#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:643
msgid "Purchase currency of this stock item"
msgstr "購買此庫存項的貨幣"
@ -6344,7 +6353,7 @@ msgstr "沒有找到匹配的供應商零件"
msgid "Multiple matching supplier parts found"
msgstr "找到多個匹配的供應商零件"
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:655
#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:664
msgid "No matching plugin found for barcode data"
msgstr "沒有找到匹配條碼數據的插件"
@ -6352,31 +6361,31 @@ msgstr "沒有找到匹配條碼數據的插件"
msgid "Matched supplier part"
msgstr "匹配的供應商零件"
#: plugin/base/barcodes/api.py:516
#: plugin/base/barcodes/api.py:525
msgid "Item has already been received"
msgstr "項目已被接收"
#: plugin/base/barcodes/api.py:554
#: plugin/base/barcodes/api.py:563
msgid "No match for supplier barcode"
msgstr "供應商條形碼沒有匹配"
#: plugin/base/barcodes/api.py:603
#: plugin/base/barcodes/api.py:612
msgid "Multiple matching line items found"
msgstr "找到多個匹配的行項目"
#: plugin/base/barcodes/api.py:606
#: plugin/base/barcodes/api.py:615
msgid "No matching line item found"
msgstr "未找到匹配的行項目"
#: plugin/base/barcodes/api.py:652
#: plugin/base/barcodes/api.py:661
msgid "No sales order provided"
msgstr "未提供銷售訂單"
#: plugin/base/barcodes/api.py:661
#: plugin/base/barcodes/api.py:670
msgid "Barcode does not match an existing stock item"
msgstr "條形碼與現有的庫存項不匹配"
#: plugin/base/barcodes/api.py:677
#: plugin/base/barcodes/api.py:686
msgid "Stock item does not match line item"
msgstr "庫存項與行項目不匹配"
@ -6384,11 +6393,11 @@ msgstr "庫存項與行項目不匹配"
msgid "Insufficient stock available"
msgstr "可用庫存不足"
#: plugin/base/barcodes/api.py:720
#: plugin/base/barcodes/api.py:729
msgid "Stock item allocated to sales order"
msgstr "庫存項已分配到銷售訂單"
#: plugin/base/barcodes/api.py:723
#: plugin/base/barcodes/api.py:732
msgid "Not enough information"
msgstr "沒有足夠的信息"
@ -6498,43 +6507,39 @@ msgstr "渲染標籤到 HTML 時出錯"
msgid "No items provided to print"
msgstr "沒有要打印的項目"
#: plugin/base/ui/serializers.py:27
msgid "Plugin Key"
msgstr "插件密鑰"
#: plugin/base/ui/serializers.py:30
msgid "Plugin Name"
msgstr ""
#: plugin/base/ui/serializers.py:31
msgid "Panel Name"
msgstr "面板名稱"
#: plugin/base/ui/serializers.py:35
msgid "Panel Title"
msgstr "面板標題"
#: plugin/base/ui/serializers.py:40
msgid "Panel Icon"
msgstr "面板圖標"
#: plugin/base/ui/serializers.py:44
msgid "Panel Content (HTML)"
msgstr "面板內容 (HTML)"
#: plugin/base/ui/serializers.py:48
msgid "Panel Context (JSON)"
msgstr "面板內容 (JSON)"
#: plugin/base/ui/serializers.py:52
msgid "Panel Source (javascript)"
msgstr "面板來源 (javascript)"
#: plugin/base/ui/serializers.py:66
#: plugin/base/ui/serializers.py:34
msgid "Feature Type"
msgstr "功能類別"
#: plugin/base/ui/serializers.py:69
#: plugin/base/ui/serializers.py:39
msgid "Feature Label"
msgstr ""
#: plugin/base/ui/serializers.py:44
msgid "Feature Title"
msgstr ""
#: plugin/base/ui/serializers.py:49
msgid "Feature Description"
msgstr ""
#: plugin/base/ui/serializers.py:54
msgid "Feature Icon"
msgstr ""
#: plugin/base/ui/serializers.py:58
msgid "Feature Options"
msgstr "特色選項"
#: plugin/base/ui/serializers.py:72
#: plugin/base/ui/serializers.py:61
msgid "Feature Context"
msgstr ""
#: plugin/base/ui/serializers.py:64
msgid "Feature Source (javascript)"
msgstr "功能源 (javascript)"
@ -6905,38 +6910,70 @@ msgstr "貨幣兑換插件示例"
msgid "InvenTree Contributors"
msgstr "InvenTree 貢獻者"
#: plugin/samples/integration/user_interface_sample.py:28
#: plugin/samples/integration/user_interface_sample.py:27
msgid "Enable Part Panels"
msgstr "啓用零件面板"
#: plugin/samples/integration/user_interface_sample.py:29
#: plugin/samples/integration/user_interface_sample.py:28
msgid "Enable custom panels for Part views"
msgstr "啓用自定義面板來查看部件"
#: plugin/samples/integration/user_interface_sample.py:34
#: plugin/samples/integration/user_interface_sample.py:33
msgid "Enable Purchase Order Panels"
msgstr "啓用採購訂單面板"
#: plugin/samples/integration/user_interface_sample.py:35
#: plugin/samples/integration/user_interface_sample.py:34
msgid "Enable custom panels for Purchase Order views"
msgstr "啓用自定義面板以查看購買訂單"
#: plugin/samples/integration/user_interface_sample.py:40
#: plugin/samples/integration/user_interface_sample.py:39
msgid "Enable Broken Panels"
msgstr "啓用破損面板"
#: plugin/samples/integration/user_interface_sample.py:41
#: plugin/samples/integration/user_interface_sample.py:40
msgid "Enable broken panels for testing"
msgstr "啓用損壞的面板來測試"
#: plugin/samples/integration/user_interface_sample.py:46
#: plugin/samples/integration/user_interface_sample.py:45
msgid "Enable Dynamic Panel"
msgstr "啓用動態面板"
#: plugin/samples/integration/user_interface_sample.py:47
#: plugin/samples/integration/user_interface_sample.py:46
msgid "Enable dynamic panels for testing"
msgstr "啓用動態面板來測試"
#: plugin/samples/integration/user_interface_sample.py:98
msgid "Part Panel"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:131
msgid "Broken Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:133
msgid "This is a broken dashboard item - it will not render!"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:139
msgid "Sample Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:141
msgid "This is a sample dashboard item. It renders a simple string of HTML content."
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:147
msgid "Context Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:161
msgid "Admin Dashboard Item"
msgstr ""
#: plugin/samples/integration/user_interface_sample.py:162
msgid "This is an admin-only dashboard item."
msgstr ""
#: plugin/serializers.py:82
msgid "Source File"
msgstr ""
@ -7441,7 +7478,7 @@ msgstr "按頂級位置篩選"
msgid "Include sub-locations in filtered results"
msgstr "在篩選結果中包含子地點"
#: stock/api.py:366 stock/serializers.py:1204
#: stock/api.py:366 stock/serializers.py:1217
msgid "Parent Location"
msgstr "上級地點"
@ -7485,7 +7522,7 @@ msgstr "給定的供應商零件不存在"
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "供應商零件有定義的包裝大小,但 use_pack_size 標誌未設置"
#: stock/api.py:993
#: stock/api.py:996
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "不能為不可跟蹤的零件提供序列號"
@ -7855,11 +7892,11 @@ msgstr "序列號太大"
msgid "Parent Item"
msgstr "父項"
#: stock/serializers.py:461
#: stock/serializers.py:463
msgid "Parent stock item"
msgstr "父庫存項"
#: stock/serializers.py:482
#: stock/serializers.py:484
msgid "Use pack size when adding: the quantity defined is the number of packs"
msgstr "添加時使用包裝尺寸:定義的數量是包裝的數量"
@ -7871,113 +7908,113 @@ msgstr "已過期"
msgid "Child Items"
msgstr "子項目"
#: stock/serializers.py:620
#: stock/serializers.py:633
msgid "Tracking Items"
msgstr "跟蹤項目"
#: stock/serializers.py:626
#: stock/serializers.py:639
msgid "Purchase price of this stock item, per unit or pack"
msgstr "此庫存商品的購買價格,單位或包裝"
#: stock/serializers.py:645
#: stock/serializers.py:658
msgid "Minimum Pricing"
msgstr "最低價格"
#: stock/serializers.py:651
#: stock/serializers.py:664
msgid "Maximum Pricing"
msgstr "最高價格"
#: stock/serializers.py:675
#: stock/serializers.py:688
msgid "Enter number of stock items to serialize"
msgstr "輸入要序列化的庫存項目數量"
#: stock/serializers.py:688
#: stock/serializers.py:701
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "數量不得超過現有庫存量 ({q})"
#: stock/serializers.py:695
#: stock/serializers.py:708
msgid "Enter serial numbers for new items"
msgstr "輸入新項目的序列號"
#: stock/serializers.py:706 stock/serializers.py:1444 stock/serializers.py:1700
#: stock/serializers.py:719 stock/serializers.py:1457 stock/serializers.py:1713
msgid "Destination stock location"
msgstr "目標庫存位置"
#: stock/serializers.py:713
#: stock/serializers.py:726
msgid "Optional note field"
msgstr "可選註釋字段"
#: stock/serializers.py:723
#: stock/serializers.py:736
msgid "Serial numbers cannot be assigned to this part"
msgstr "此零件不能分配序列號"
#: stock/serializers.py:743
#: stock/serializers.py:756
msgid "Serial numbers already exist"
msgstr "序列號已存在"
#: stock/serializers.py:782
#: stock/serializers.py:795
msgid "Select stock item to install"
msgstr "選擇要安裝的庫存項目"
#: stock/serializers.py:789
#: stock/serializers.py:802
msgid "Quantity to Install"
msgstr "安裝數量"
#: stock/serializers.py:790
#: stock/serializers.py:803
msgid "Enter the quantity of items to install"
msgstr "輸入要安裝的項目數量"
#: stock/serializers.py:795 stock/serializers.py:875 stock/serializers.py:1001
#: stock/serializers.py:1051
#: stock/serializers.py:808 stock/serializers.py:888 stock/serializers.py:1014
#: stock/serializers.py:1064
msgid "Add transaction note (optional)"
msgstr "添加交易記錄 (可選)"
#: stock/serializers.py:803
#: stock/serializers.py:816
msgid "Quantity to install must be at least 1"
msgstr "安裝數量必須至少為1"
#: stock/serializers.py:811
#: stock/serializers.py:824
msgid "Stock item is unavailable"
msgstr "庫存項不可用"
#: stock/serializers.py:822
#: stock/serializers.py:835
msgid "Selected part is not in the Bill of Materials"
msgstr "所選零件不在物料清單中"
#: stock/serializers.py:835
#: stock/serializers.py:848
msgid "Quantity to install must not exceed available quantity"
msgstr "安裝數量不得超過可用數量"
#: stock/serializers.py:870
#: stock/serializers.py:883
msgid "Destination location for uninstalled item"
msgstr "已卸載項目的目標位置"
#: stock/serializers.py:921
#: stock/serializers.py:934
msgid "Unsupported statistic type: "
msgstr "不支持的統計類型: "
#: stock/serializers.py:935
#: stock/serializers.py:948
msgid "Select part to convert stock item into"
msgstr "選擇要將庫存項目轉換為的零件"
#: stock/serializers.py:948
#: stock/serializers.py:961
msgid "Selected part is not a valid option for conversion"
msgstr "所選零件不是有效的轉換選項"
#: stock/serializers.py:965
#: stock/serializers.py:978
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "無法轉換已分配供應商零件的庫存項"
#: stock/serializers.py:996
#: stock/serializers.py:1009
msgid "Destination location for returned item"
msgstr "退回物品的目的地位置"
#: stock/serializers.py:1033
#: stock/serializers.py:1046
msgid "Select stock items to change status"
msgstr "選擇要更改狀態的庫存項目"
#: stock/serializers.py:1039
#: stock/serializers.py:1052
msgid "No stock items selected"
msgstr "未選擇庫存商品"
@ -7989,71 +8026,71 @@ msgstr "轉租"
msgid "Parent stock location"
msgstr "上級庫存地點"
#: stock/serializers.py:1316
#: stock/serializers.py:1329
msgid "Part must be salable"
msgstr "零件必須可銷售"
#: stock/serializers.py:1320
#: stock/serializers.py:1333
msgid "Item is allocated to a sales order"
msgstr "物料已分配到銷售訂單"
#: stock/serializers.py:1324
#: stock/serializers.py:1337
msgid "Item is allocated to a build order"
msgstr "項目被分配到生產訂單中"
#: stock/serializers.py:1348
#: stock/serializers.py:1361
msgid "Customer to assign stock items"
msgstr "客户分配庫存項目"
#: stock/serializers.py:1354
#: stock/serializers.py:1367
msgid "Selected company is not a customer"
msgstr "所選公司不是客户"
#: stock/serializers.py:1362
#: stock/serializers.py:1375
msgid "Stock assignment notes"
msgstr "庫存分配説明"
#: stock/serializers.py:1372 stock/serializers.py:1626
#: stock/serializers.py:1385 stock/serializers.py:1639
msgid "A list of stock items must be provided"
msgstr "必須提供庫存物品清單"
#: stock/serializers.py:1451
#: stock/serializers.py:1464
msgid "Stock merging notes"
msgstr "庫存合併説明"
#: stock/serializers.py:1456
#: stock/serializers.py:1469
msgid "Allow mismatched suppliers"
msgstr "允許不匹配的供應商"
#: stock/serializers.py:1457
#: stock/serializers.py:1470
msgid "Allow stock items with different supplier parts to be merged"
msgstr "允許合併具有不同供應商零件的庫存項目"
#: stock/serializers.py:1462
#: stock/serializers.py:1475
msgid "Allow mismatched status"
msgstr "允許不匹配的狀態"
#: stock/serializers.py:1463
#: stock/serializers.py:1476
msgid "Allow stock items with different status codes to be merged"
msgstr "允許合併具有不同狀態代碼的庫存項目"
#: stock/serializers.py:1473
#: stock/serializers.py:1486
msgid "At least two stock items must be provided"
msgstr "必須提供至少兩件庫存物品"
#: stock/serializers.py:1540
#: stock/serializers.py:1553
msgid "No Change"
msgstr "無更改"
#: stock/serializers.py:1569
#: stock/serializers.py:1582
msgid "StockItem primary key value"
msgstr "庫存項主鍵值"
#: stock/serializers.py:1588
#: stock/serializers.py:1601
msgid "Stock item status code"
msgstr "庫存項狀態代碼"
#: stock/serializers.py:1616
#: stock/serializers.py:1629
msgid "Stock transaction notes"
msgstr "庫存交易記錄"

View File

@ -196,7 +196,9 @@ class PurchaseOrderMixin:
"""Return the annotated queryset for this endpoint."""
queryset = super().get_queryset(*args, **kwargs)
queryset = queryset.prefetch_related('supplier', 'lines')
queryset = queryset.prefetch_related(
'supplier', 'project_code', 'lines', 'responsible'
)
queryset = serializers.PurchaseOrderSerializer.annotate_queryset(queryset)
@ -671,7 +673,9 @@ class SalesOrderMixin:
"""Return annotated queryset for this endpoint."""
queryset = super().get_queryset(*args, **kwargs)
queryset = queryset.prefetch_related('customer', 'lines')
queryset = queryset.prefetch_related(
'customer', 'responsible', 'project_code', 'lines'
)
queryset = serializers.SalesOrderSerializer.annotate_queryset(queryset)
@ -812,6 +816,17 @@ class SalesOrderLineItemFilter(LineItemFilter):
return queryset.exclude(order__status__in=SalesOrderStatusGroups.COMPLETE)
order_outstanding = rest_filters.BooleanFilter(
label=_('Order Outstanding'), method='filter_order_outstanding'
)
def filter_order_outstanding(self, queryset, name, value):
"""Filter by whether the order is 'outstanding' or not."""
if str2bool(value):
return queryset.filter(order__status__in=SalesOrderStatusGroups.OPEN)
return queryset.exclude(order__status__in=SalesOrderStatusGroups.OPEN)
class SalesOrderLineItemMixin:
"""Mixin class for SalesOrderLineItem endpoints."""
@ -974,7 +989,7 @@ class SalesOrderAllocationFilter(rest_filters.FilterSet):
"""Metaclass options."""
model = models.SalesOrderAllocation
fields = ['shipment', 'item']
fields = ['shipment', 'line', 'item']
order = rest_filters.ModelChoiceFilter(
queryset=models.SalesOrder.objects.all(),
@ -1030,6 +1045,16 @@ class SalesOrderAllocationFilter(rest_filters.FilterSet):
line__order__status__in=SalesOrderStatusGroups.OPEN,
)
assigned_to_shipment = rest_filters.BooleanFilter(
label=_('Has Shipment'), method='filter_assigned_to_shipment'
)
def filter_assigned_to_shipment(self, queryset, name, value):
"""Filter by whether or not the allocation has been assigned to a shipment."""
if str2bool(value):
return queryset.exclude(shipment=None)
return queryset.filter(shipment=None)
class SalesOrderAllocationMixin:
"""Mixin class for SalesOrderAllocation endpoints."""
@ -1045,12 +1070,16 @@ class SalesOrderAllocationMixin:
'item',
'item__sales_order',
'item__part',
'line__part',
'item__location',
'line__order',
'line__part',
'line__order__responsible',
'line__order__project_code',
'line__order__project_code__responsible',
'shipment',
'shipment__order',
)
'shipment__checked_by',
).select_related('line__part__pricing_data', 'item__part__pricing_data')
return queryset
@ -1061,7 +1090,15 @@ class SalesOrderAllocationList(SalesOrderAllocationMixin, ListAPI):
filterset_class = SalesOrderAllocationFilter
filter_backends = SEARCH_ORDER_FILTER_ALIAS
ordering_fields = ['quantity', 'part', 'serial', 'batch', 'location', 'order']
ordering_fields = [
'quantity',
'part',
'serial',
'batch',
'location',
'order',
'shipment_date',
]
ordering_field_aliases = {
'part': 'item__part__name',
@ -1069,6 +1106,7 @@ class SalesOrderAllocationList(SalesOrderAllocationMixin, ListAPI):
'batch': 'item__batch',
'location': 'item__location__name',
'order': 'line__order__reference',
'shipment_date': 'shipment__shipment_date',
}
search_fields = {'item__part__name', 'item__serial', 'item__batch'}
@ -1244,7 +1282,9 @@ class ReturnOrderMixin:
"""Return annotated queryset for this endpoint."""
queryset = super().get_queryset(*args, **kwargs)
queryset = queryset.prefetch_related('customer')
queryset = queryset.prefetch_related(
'customer', 'lines', 'project_code', 'responsible'
)
queryset = serializers.ReturnOrderSerializer.annotate_queryset(queryset)

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.16 on 2024-10-31 02:52
from django.db import migrations
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('stock', '0113_stockitem_status_custom_key_and_more'),
('order', '0101_purchaseorder_status_custom_key_and_more'),
]
operations = [
migrations.AddField(
model_name='purchaseorder',
name='destination',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='purchase_orders', to='stock.stocklocation', verbose_name='Destination', help_text='Destination for received items'),
),
migrations.AlterField(
model_name='purchaseorderlineitem',
name='destination',
field=mptt.fields.TreeForeignKey(blank=True, help_text='Destination for received items', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='po_lines', to='stock.stocklocation', verbose_name='Destination'),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 4.2.16 on 2024-11-06 04:46
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('order', '0102_purchaseorder_destination_and_more'),
]
operations = [
migrations.AlterField(
model_name='salesorderallocation',
name='shipment',
field=models.ForeignKey(blank=True, help_text='Sales order shipment reference', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='allocations', to='order.salesordershipment', verbose_name='Shipment'),
),
]

View File

@ -1,7 +1,6 @@
"""Order model definitions."""
import logging
import sys
from datetime import datetime
from decimal import Decimal
@ -150,9 +149,6 @@ class TotalPriceMixin(models.Model):
try:
total += line.quantity * convert_money(line.price, target_currency)
except MissingRate:
# Record the error, try to press on
_1, _2, _3 = sys.exc_info()
log_error('order.calculate_total_price')
logger.exception("Missing exchange rate for '%s'", target_currency)
@ -540,6 +536,16 @@ class PurchaseOrder(TotalPriceMixin, Order):
help_text=_('Date order was completed'),
)
destination = TreeForeignKey(
'stock.StockLocation',
on_delete=models.SET_NULL,
related_name='purchase_orders',
blank=True,
null=True,
verbose_name=_('Destination'),
help_text=_('Destination for received items'),
)
@transaction.atomic
def add_line_item(
self,
@ -1094,6 +1100,11 @@ class SalesOrder(TotalPriceMixin, Order):
_('Order cannot be completed as there are incomplete shipments')
)
if self.pending_allocation_count > 0:
raise ValidationError(
_('Order cannot be completed as there are incomplete allocations')
)
if not allow_incomplete_lines and self.pending_line_count > 0:
raise ValidationError(
_('Order cannot be completed as there are incomplete line items')
@ -1286,6 +1297,23 @@ class SalesOrder(TotalPriceMixin, Order):
"""Return a queryset of the pending shipments for this order."""
return self.shipments.filter(shipment_date=None)
def allocations(self):
"""Return a queryset of all allocations for this order."""
return SalesOrderAllocation.objects.filter(line__order=self)
def pending_allocations(self):
"""Return a queryset of any pending allocations for this order.
Allocations are pending if:
a) They are not associated with a SalesOrderShipment
b) The linked SalesOrderShipment has not been shipped
"""
Q1 = Q(shipment=None)
Q2 = Q(shipment__shipment_date=None)
return self.allocations().filter(Q1 | Q2).distinct()
@property
def shipment_count(self):
"""Return the total number of shipments associated with this order."""
@ -1301,6 +1329,11 @@ class SalesOrder(TotalPriceMixin, Order):
"""Return the number of pending shipments associated with this order."""
return self.pending_shipments().count()
@property
def pending_allocation_count(self):
"""Return the number of pending (non-shipped) allocations."""
return self.pending_allocations().count()
@receiver(post_save, sender=SalesOrder, dispatch_uid='sales_order_post_save')
def after_save_sales_order(sender, instance: SalesOrder, created: bool, **kwargs):
@ -1476,10 +1509,9 @@ class PurchaseOrderLineItem(OrderLineItem):
def __str__(self):
"""Render a string representation of a PurchaseOrderLineItem instance."""
return '{n} x {part} from {supplier} (for {po})'.format(
return '{n} x {part} - {po}'.format(
n=decimal2string(self.quantity),
part=self.part.SKU if self.part else 'unknown part',
supplier=self.order.supplier.name if self.order.supplier else _('deleted'),
po=self.order,
)
@ -1539,7 +1571,7 @@ class PurchaseOrderLineItem(OrderLineItem):
related_name='po_lines',
blank=True,
null=True,
help_text=_('Where does the Purchaser want this item to be stored?'),
help_text=_('Destination for received items'),
)
def get_destination(self):
@ -2020,7 +2052,7 @@ class SalesOrderAllocation(models.Model):
if self.item.serial and self.quantity != 1:
errors['quantity'] = _('Quantity must be 1 for serialized stock item')
if self.line.order != self.shipment.order:
if self.shipment and self.line.order != self.shipment.order:
errors['line'] = _('Sales order does not match shipment')
errors['shipment'] = _('Shipment does not match sales order')
@ -2037,6 +2069,8 @@ class SalesOrderAllocation(models.Model):
shipment = models.ForeignKey(
SalesOrderShipment,
on_delete=models.CASCADE,
null=True,
blank=True,
related_name='allocations',
verbose_name=_('Shipment'),
help_text=_('Sales order shipment reference'),

View File

@ -318,6 +318,7 @@ class PurchaseOrderSerializer(
'supplier_name',
'total_price',
'order_currency',
'destination',
])
read_only_fields = ['issue_date', 'complete_date', 'creation_date']
@ -844,6 +845,20 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer):
except DjangoValidationError as e:
raise ValidationError({'serial_numbers': e.messages})
invalid_serials = []
# Check the serial numbers are valid
for serial in data['serials']:
try:
base_part.validate_serial_number(serial, raise_error=True)
except (ValidationError, DjangoValidationError):
invalid_serials.append(serial)
if len(invalid_serials) > 0:
msg = _('The following serial numbers already exist or are invalid')
msg += ': ' + ', '.join(invalid_serials)
raise ValidationError({'serial_numbers': msg})
return data
@ -860,6 +875,7 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer):
location = serializers.PrimaryKeyRelatedField(
queryset=stock.models.StockLocation.objects.all(),
many=False,
required=False,
allow_null=True,
label=_('Location'),
help_text=_('Select destination location for received items'),
@ -873,9 +889,10 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer):
"""
super().validate(data)
order = self.context['order']
items = data.get('items', [])
location = data.get('location', None)
location = data.get('location', order.destination)
if len(items) == 0:
raise ValidationError(_('Line items must be provided'))
@ -919,15 +936,17 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer):
order = self.context['order']
items = data['items']
location = data.get('location', None)
# Location can be provided, or default to the order destination
location = data.get('location', order.destination)
# Now we can actually receive the items into stock
with transaction.atomic():
for item in items:
# Select location (in descending order of priority)
loc = (
location
or item.get('location', None)
item.get('location', None)
or location
or item['line_item'].get_destination()
)
@ -971,6 +990,8 @@ class SalesOrderSerializer(
'shipment_date',
'total_price',
'order_currency',
'shipments_count',
'completed_shipments_count',
])
read_only_fields = ['status', 'creation_date', 'shipment_date']
@ -1016,12 +1037,26 @@ class SalesOrderSerializer(
)
)
# Annotate shipment details
queryset = queryset.annotate(
shipments_count=SubqueryCount('shipments'),
completed_shipments_count=SubqueryCount(
'shipments', filter=Q(shipment_date__isnull=False)
),
)
return queryset
customer_detail = CompanyBriefSerializer(
source='customer', many=False, read_only=True
)
shipments_count = serializers.IntegerField(read_only=True, label=_('Shipments'))
completed_shipments_count = serializers.IntegerField(
read_only=True, label=_('Completed Shipments')
)
class SalesOrderIssueSerializer(OrderAdjustSerializer):
"""Serializer for issuing a SalesOrder."""
@ -1227,6 +1262,15 @@ class SalesOrderShipmentSerializer(NotesFieldMixin, InvenTreeModelSerializer):
'notes',
]
def __init__(self, *args, **kwargs):
"""Initialization routine for the serializer."""
order_detail = kwargs.pop('order_detail', True)
super().__init__(*args, **kwargs)
if not order_detail:
self.fields.pop('order_detail', None)
@staticmethod
def annotate_queryset(queryset):
"""Annotate the queryset with extra information."""
@ -1257,22 +1301,26 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer):
fields = [
'pk',
'line',
'customer_detail',
'serial',
'quantity',
'location',
'location_detail',
'item',
'item_detail',
'order',
'order_detail',
'part',
'part_detail',
'quantity',
'shipment',
# Annotated read-only fields
'line',
'part',
'order',
'serial',
'location',
# Extra detail fields
'item_detail',
'part_detail',
'order_detail',
'customer_detail',
'location_detail',
'shipment_detail',
]
read_only_fields = ['line', '']
def __init__(self, *args, **kwargs):
"""Initialization routine for the serializer."""
order_detail = kwargs.pop('order_detail', False)
@ -1322,7 +1370,7 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer):
)
shipment_detail = SalesOrderShipmentSerializer(
source='shipment', many=False, read_only=True
source='shipment', order_detail=False, many=False, read_only=True
)
@ -1577,8 +1625,8 @@ class SalesOrderSerialAllocationSerializer(serializers.Serializer):
shipment = serializers.PrimaryKeyRelatedField(
queryset=order.models.SalesOrderShipment.objects.all(),
many=False,
allow_null=False,
required=True,
required=False,
allow_null=True,
label=_('Shipment'),
)
@ -1590,10 +1638,10 @@ class SalesOrderSerialAllocationSerializer(serializers.Serializer):
"""
order = self.context['order']
if shipment.shipment_date is not None:
if shipment and shipment.shipment_date is not None:
raise ValidationError(_('Shipment has already been shipped'))
if shipment.order != order:
if shipment and shipment.order != order:
raise ValidationError(_('Shipment is not associated with this order'))
return shipment
@ -1701,8 +1749,8 @@ class SalesOrderShipmentAllocationSerializer(serializers.Serializer):
shipment = serializers.PrimaryKeyRelatedField(
queryset=order.models.SalesOrderShipment.objects.all(),
many=False,
allow_null=False,
required=True,
required=False,
allow_null=True,
label=_('Shipment'),
)
@ -1737,7 +1785,7 @@ class SalesOrderShipmentAllocationSerializer(serializers.Serializer):
data = self.validated_data
items = data['items']
shipment = data['shipment']
shipment = data.get('shipment')
with transaction.atomic():
for entry in items:

View File

@ -882,7 +882,6 @@ class PurchaseOrderReceiveTest(OrderTest):
data = self.post(self.url, {}, expected_code=400).data
self.assertIn('This field is required', str(data['items']))
self.assertIn('This field is required', str(data['location']))
# No new stock items have been created
self.assertEqual(self.n, StockItem.objects.count())
@ -1060,9 +1059,9 @@ class PurchaseOrderReceiveTest(OrderTest):
self.assertEqual(stock_1.count(), 1)
self.assertEqual(stock_2.count(), 1)
# Same location for each received item, as overall 'location' field is provided
# Check received locations
self.assertEqual(stock_1.last().location.pk, 1)
self.assertEqual(stock_2.last().location.pk, 1)
self.assertEqual(stock_2.last().location.pk, 2)
# Barcodes should have been assigned to the stock items
self.assertTrue(
@ -1878,7 +1877,6 @@ class SalesOrderAllocateTest(OrderTest):
response = self.post(self.url, {}, expected_code=400)
self.assertIn('This field is required', str(response.data['items']))
self.assertIn('This field is required', str(response.data['shipment']))
# Test with a single line items
line = self.order.lines.first()

View File

@ -47,7 +47,7 @@ class OrderTest(TestCase):
self.assertEqual(order.reference, f'PO-{pk:04d}')
line = PurchaseOrderLineItem.objects.get(pk=1)
self.assertEqual(str(line), '100 x ACME0001 from ACME (for PO-0001 - ACME)')
self.assertEqual(str(line), '100 x ACME0001 - PO-0001 - ACME')
def test_rebuild_reference(self):
"""Test that the reference_int field is correctly updated when the model is saved."""

View File

@ -1886,6 +1886,7 @@ class BomList(BomMixin, DataExportViewMixin, ListCreateDestroyAPIView):
'inherited',
'optional',
'consumable',
'reference',
'validated',
'pricing_min',
'pricing_max',

View File

@ -1708,6 +1708,10 @@ class BomItemSerializer(
'sub_part__stock_items__sales_order_allocations',
)
queryset = queryset.select_related(
'part__pricing_data', 'sub_part__pricing_data'
)
queryset = queryset.prefetch_related(
'substitutes', 'substitutes__part__stock_items'
)

View File

@ -500,6 +500,15 @@ class BarcodePOReceive(BarcodeView):
purchase_order = kwargs.get('purchase_order')
location = kwargs.get('location')
# Extract location from PurchaseOrder, if available
if not location and purchase_order:
try:
po = order.models.PurchaseOrder.objects.get(pk=purchase_order)
if po.destination:
location = po.destination.pk
except Exception:
pass
plugins = registry.with_mixin('barcode')
# Look for a barcode plugin which knows how to deal with this barcode

View File

@ -105,3 +105,32 @@ class SettingsMixin:
return PluginSetting.check_all_settings(
settings_definition=self.settings, plugin=self.plugin_config()
)
def get_settings_dict(self) -> dict:
"""Return a dictionary of all settings for this plugin.
- For each setting, return <key>: <value> pair.
- If the setting is not defined, return the default value (if defined).
Returns:
dict: Dictionary of all settings for this plugin
"""
from plugin.models import PluginSetting
keys = self.settings.keys()
settings = PluginSetting.objects.filter(
plugin=self.plugin_config(), key__in=keys
)
settings_dict = {}
for setting in settings:
settings_dict[setting.key] = setting.value
# Add any missing settings
for key in keys:
if key not in settings_dict:
settings_dict[key] = self.settings[key].get('default')
return settings_dict

View File

@ -13,47 +13,6 @@ from InvenTree.exceptions import log_error
from plugin import registry
class PluginPanelList(APIView):
"""API endpoint for listing all available plugin panels."""
permission_classes = [IsAuthenticated]
serializer_class = UIPluginSerializers.PluginPanelSerializer
@extend_schema(
responses={200: UIPluginSerializers.PluginPanelSerializer(many=True)}
)
def get(self, request):
"""Show available plugin panels."""
target_model = request.query_params.get('target_model', None)
target_id = request.query_params.get('target_id', None)
panels = []
if get_global_setting('ENABLE_PLUGINS_INTERFACE'):
# Extract all plugins from the registry which provide custom panels
for _plugin in registry.with_mixin('ui', active=True):
try:
# Allow plugins to fill this data out
plugin_panels = _plugin.get_ui_panels(
target_model, target_id, request
)
if plugin_panels and type(plugin_panels) is list:
for panel in plugin_panels:
panel['plugin'] = _plugin.slug
# TODO: Validate each panel before inserting
panels.append(panel)
except Exception:
# Custom panels could not load
# Log the error and continue
log_error(f'{_plugin.slug}.get_ui_panels')
return Response(
UIPluginSerializers.PluginPanelSerializer(panels, many=True).data
)
class PluginUIFeatureList(APIView):
"""API endpoint for listing all available plugin ui features."""
@ -71,24 +30,49 @@ class PluginUIFeatureList(APIView):
# Extract all plugins from the registry which provide custom ui features
for _plugin in registry.with_mixin('ui', active=True):
# Allow plugins to fill this data out
plugin_features = _plugin.get_ui_features(
feature, request.query_params, request
)
try:
plugin_features = _plugin.get_ui_features(
feature, request.query_params, request
)
except Exception:
# Custom features could not load for this plugin
# Log the error and continue
log_error(f'{_plugin.slug}.get_ui_features')
continue
if plugin_features and type(plugin_features) is list:
for _feature in plugin_features:
features.append(_feature)
try:
# Ensure that the required fields are present
_feature['plugin_name'] = _plugin.slug
_feature['feature_type'] = str(feature)
return Response(
UIPluginSerializers.PluginUIFeatureSerializer(features, many=True).data
)
# Ensure base fields are strings
for field in ['key', 'title', 'description', 'source']:
if field in _feature:
_feature[field] = str(_feature[field])
# Add the feature to the list (serialize)
features.append(
UIPluginSerializers.PluginUIFeatureSerializer(
_feature, many=False
).data
)
except Exception:
# Custom features could not load
# Log the error and continue
log_error(f'{_plugin.slug}.get_ui_features')
continue
return Response(features)
ui_plugins_api_urls = [
path('panels/', PluginPanelList.as_view(), name='api-plugin-panel-list'),
path(
'features/<str:feature>/',
PluginUIFeatureList.as_view(),
name='api-plugin-ui-feature-list',
),
)
]

View File

@ -11,43 +11,59 @@ from rest_framework.request import Request
logger = logging.getLogger('inventree')
class CustomPanel(TypedDict):
"""Type definition for a custom panel.
Attributes:
name: The name of the panel (required, used as a DOM identifier).
label: The label of the panel (required, human readable).
icon: The icon of the panel (optional, must be a valid icon identifier).
content: The content of the panel (optional, raw HTML).
context: Optional context data (dict / JSON) which will be passed to the front-end rendering function
source: The source of the panel (optional, path to a JavaScript file).
"""
name: str
label: str
icon: str
content: str
context: dict
source: str
FeatureType = Literal['template_editor', 'template_preview']
# List of supported feature types
FeatureType = Literal[
'dashboard', # Custom dashboard items
'panel', # Custom panels
'template_editor', # Custom template editor
'template_preview', # Custom template preview
]
class UIFeature(TypedDict):
"""Base type definition for a ui feature.
Attributes:
key: The key of the feature (required, must be a unique identifier)
title: The title of the feature (required, human readable)
description: The long-form description of the feature (optional, human readable)
icon: The icon of the feature (optional, must be a valid icon identifier)
feature_type: The feature type (required, see documentation for all available types)
options: Feature options (required, see documentation for all available options for each type)
source: The source of the feature (required, path to a JavaScript file).
context: Additional context data to be passed to the rendering function (optional, dict)
source: The source of the feature (required, path to a JavaScript file, with optional function name).
"""
key: str
title: str
description: str
icon: str
feature_type: FeatureType
options: dict
context: dict
source: str
class CustomPanelOptions(TypedDict):
"""Options type definition for a custom panel.
Attributes:
icon: The icon of the panel (optional, must be a valid icon identifier).
"""
class CustomDashboardItemOptions(TypedDict):
"""Options type definition for a custom dashboard item.
Attributes:
width: The minimum width of the dashboard item (integer, defaults to 2)
height: The minimum height of the dashboard item (integer, defaults to 2)
"""
width: int
height: int
class UserInterfaceMixin:
"""Plugin mixin class which handles injection of custom elements into the front-end interface.
@ -65,48 +81,85 @@ class UserInterfaceMixin:
super().__init__()
self.add_mixin('ui', True, __class__) # type: ignore
def get_ui_panels(
self, instance_type: str, instance_id: int, request: Request, **kwargs
) -> list[CustomPanel]:
"""Return a list of custom panels to be injected into the UI.
Args:
instance_type: The type of object being viewed (e.g. 'part')
instance_id: The ID of the object being viewed (e.g. 123)
request: HTTPRequest object (including user information)
Returns:
list: A list of custom panels to be injected into the UI
- The returned list should contain a dict for each custom panel to be injected into the UI:
- The following keys can be specified:
{
'name': 'panel_name', # The name of the panel (required, must be unique)
'label': 'Panel Title', # The title of the panel (required, human readable)
'icon': 'icon-name', # Icon name (optional, must be a valid icon identifier)
'content': '<p>Panel content</p>', # HTML content to be rendered in the panel (optional)
'context': {'key': 'value'}, # Context data to be passed to the front-end rendering function (optional)
'source': 'static/plugin/panel.js', # Path to a JavaScript file to be loaded (optional)
}
- Either 'source' or 'content' must be provided
"""
# Default implementation returns an empty list
return []
def get_ui_features(
self, feature_type: FeatureType, context: dict, request: Request
self, feature_type: FeatureType, context: dict, request: Request, **kwargs
) -> list[UIFeature]:
"""Return a list of custom features to be injected into the UI.
Arguments:
feature_type: The type of feature being requested
context: Additional context data provided by the UI
context: Additional context data provided by the UI (query parameters)
request: HTTPRequest object (including user information)
Returns:
list: A list of custom UIFeature dicts to be injected into the UI
"""
feature_map = {
'dashboard': self.get_ui_dashboard_items,
'panel': self.get_ui_panels,
'template_editor': self.get_ui_template_editors,
'template_preview': self.get_ui_template_previews,
}
if feature_type in feature_map:
return feature_map[feature_type](request, context, **kwargs)
else:
logger.warning(f'Invalid feature type: {feature_type}')
return []
def get_ui_panels(
self, request: Request, context: dict, **kwargs
) -> list[UIFeature]:
"""Return a list of custom panels to be injected into the UI.
Args:
request: HTTPRequest object (including user information)
Returns:
list: A list of custom panels to be injected into the UI
"""
# Default implementation returns an empty list
return []
def get_ui_dashboard_items(
self, request: Request, context: dict, **kwargs
) -> list[UIFeature]:
"""Return a list of custom dashboard items to be injected into the UI.
Args:
request: HTTPRequest object (including user information)
Returns:
list: A list of custom dashboard items to be injected into the UI
"""
# Default implementation returns an empty list
return []
def get_ui_template_editors(
self, request: Request, context: dict, **kwargs
) -> list[UIFeature]:
"""Return a list of custom template editors to be injected into the UI.
Args:
request: HTTPRequest object (including user information)
Returns:
list: A list of custom template editors to be injected into the UI
"""
# Default implementation returns an empty list
return []
def get_ui_template_previews(
self, request: Request, context: dict, **kwargs
) -> list[UIFeature]:
"""Return a list of custom template previews to be injected into the UI.
Args:
request: HTTPRequest object (including user information)
Returns:
list: A list of custom template previews to be injected into the UI
"""
# Default implementation returns an empty list
return []

View File

@ -5,68 +5,60 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
class PluginPanelSerializer(serializers.Serializer):
"""Serializer for a plugin panel."""
class Meta:
"""Meta for serializer."""
fields = [
'plugin',
'name',
'label',
# Following fields are optional
'icon',
'content',
'context',
'source',
]
# Required fields
plugin = serializers.CharField(
label=_('Plugin Key'), required=True, allow_blank=False
)
name = serializers.CharField(
label=_('Panel Name'), required=True, allow_blank=False
)
label = serializers.CharField(
label=_('Panel Title'), required=True, allow_blank=False
)
# Optional fields
icon = serializers.CharField(
label=_('Panel Icon'), required=False, allow_blank=True
)
content = serializers.CharField(
label=_('Panel Content (HTML)'), required=False, allow_blank=True
)
context = serializers.JSONField(
label=_('Panel Context (JSON)'), required=False, allow_null=True, default=None
)
source = serializers.CharField(
label=_('Panel Source (javascript)'), required=False, allow_blank=True
)
class PluginUIFeatureSerializer(serializers.Serializer):
"""Serializer for a plugin ui feature."""
class Meta:
"""Meta for serializer."""
fields = ['feature_type', 'options', 'source']
fields = [
'plugin_name',
'feature_type',
'key',
'title',
'description',
'icon',
'options',
'context',
'source',
]
# Required fields
# The name of the plugin that provides this feature
plugin_name = serializers.CharField(
label=_('Plugin Name'), required=True, allow_blank=False
)
feature_type = serializers.CharField(
label=_('Feature Type'), required=True, allow_blank=False
)
options = serializers.DictField(label=_('Feature Options'), required=True)
# Item key to be used in the UI - this should be a DOM identifier and is not user facing
key = serializers.CharField(
label=_('Feature Label'), required=True, allow_blank=False
)
# Title to be used in the UI - this is user facing (and should be human readable)
title = serializers.CharField(
label=_('Feature Title'), required=False, allow_blank=True
)
# Long-form description of the feature (optional)
description = serializers.CharField(
label=_('Feature Description'), required=False, allow_blank=True
)
# Optional icon
icon = serializers.CharField(
label=_('Feature Icon'), required=False, allow_blank=True
)
# Additional options, specific to the particular UI feature
options = serializers.DictField(label=_('Feature Options'), default=None)
# Server side context, supplied to the client side for rendering
context = serializers.DictField(label=_('Feature Context'), default=None)
source = serializers.CharField(
label=_('Feature Source (javascript)'), required=True, allow_blank=False

View File

@ -33,7 +33,60 @@ class UserInterfaceMixinTests(InvenTreeAPITestCase):
plugins = registry.with_mixin('ui')
self.assertGreater(len(plugins), 0)
def test_panels(self):
def test_ui_dashboard_items(self):
"""Test that the sample UI plugin provides custom dashboard items."""
# Ensure the user has superuser status
self.user.is_superuser = True
self.user.save()
url = reverse('api-plugin-ui-feature-list', kwargs={'feature': 'dashboard'})
response = self.get(url)
self.assertEqual(len(response.data), 4)
for item in response.data:
self.assertEqual(item['plugin_name'], 'sampleui')
self.assertEqual(response.data[0]['key'], 'broken-dashboard-item')
self.assertEqual(response.data[0]['title'], 'Broken Dashboard Item')
self.assertEqual(response.data[0]['source'], '/this/does/not/exist.js')
self.assertEqual(response.data[1]['key'], 'sample-dashboard-item')
self.assertEqual(response.data[1]['title'], 'Sample Dashboard Item')
self.assertEqual(
response.data[1]['source'],
'/static/plugins/sampleui/sample_dashboard_item.js',
)
self.assertEqual(response.data[2]['key'], 'dynamic-dashboard-item')
self.assertEqual(response.data[2]['title'], 'Context Dashboard Item')
self.assertEqual(
response.data[2]['source'],
'/static/plugins/sampleui/sample_dashboard_item.js:renderContextItem',
)
self.assertEqual(response.data[3]['key'], 'admin-dashboard-item')
self.assertEqual(response.data[3]['title'], 'Admin Dashboard Item')
self.assertEqual(
response.data[3]['source'],
'/static/plugins/sampleui/admin_dashboard_item.js',
)
# Additional options and context data should be passed through to the client
self.assertDictEqual(response.data[3]['options'], {'width': 4, 'height': 2})
self.assertDictEqual(
response.data[3]['context'], {'secret-key': 'this-is-a-secret'}
)
# Remove superuser status - the 'admin-dashboard-item' should disappear
self.user.is_superuser = False
self.user.save()
response = self.get(url)
self.assertEqual(len(response.data), 3)
def test_ui_panels(self):
"""Test that the sample UI plugin provides custom panels."""
from part.models import Part
@ -45,7 +98,7 @@ class UserInterfaceMixinTests(InvenTreeAPITestCase):
_part.active = True
_part.save()
url = reverse('api-plugin-panel-list')
url = reverse('api-plugin-ui-feature-list', kwargs={'feature': 'panel'})
query_data = {'target_model': 'part', 'target_id': _part.pk}
@ -59,7 +112,7 @@ class UserInterfaceMixinTests(InvenTreeAPITestCase):
response = self.get(url, data=query_data)
# There should be 4 active panels for the part by default
self.assertEqual(4, len(response.data))
self.assertEqual(3, len(response.data))
_part.active = False
_part.save()
@ -74,23 +127,27 @@ class UserInterfaceMixinTests(InvenTreeAPITestCase):
response = self.get(url, data=query_data)
# There should still be 3 panels
self.assertEqual(3, len(response.data))
# There should still be 2 panels
self.assertEqual(2, len(response.data))
# Check for the correct panel names
self.assertEqual(response.data[0]['name'], 'sample_panel')
self.assertIn('content', response.data[0])
self.assertNotIn('source', response.data[0])
for panel in response.data:
self.assertEqual(panel['plugin_name'], 'sampleui')
self.assertEqual(panel['feature_type'], 'panel')
self.assertEqual(response.data[1]['name'], 'broken_panel')
self.assertEqual(response.data[1]['source'], '/this/does/not/exist.js')
self.assertNotIn('content', response.data[1])
self.assertEqual(response.data[0]['key'], 'broken-panel')
self.assertEqual(response.data[0]['title'], 'Broken Panel')
self.assertEqual(response.data[0]['source'], '/this/does/not/exist.js')
self.assertEqual(response.data[2]['name'], 'dynamic_panel')
self.assertEqual(response.data[1]['key'], 'dynamic-panel')
self.assertEqual(response.data[1]['title'], 'Dynamic Panel')
self.assertEqual(
response.data[2]['source'], '/static/plugins/sampleui/sample_panel.js'
response.data[1]['source'], '/static/plugins/sampleui/sample_panel.js'
)
self.assertNotIn('content', response.data[2])
ctx = response.data[1]['context']
for k in ['version', 'plugin_version', 'random', 'time']:
self.assertIn(k, ctx)
# Next, disable the global setting for UI integration
InvenTreeSetting.set_setting(
@ -105,8 +162,8 @@ class UserInterfaceMixinTests(InvenTreeAPITestCase):
# Set the setting back to True for subsequent tests
InvenTreeSetting.set_setting('ENABLE_PLUGINS_INTERFACE', True, change_user=None)
def test_ui_features(self):
"""Test that the sample UI plugin provides custom features."""
def test_ui_template_editors(self):
"""Test that the sample UI plugin provides template editor features."""
template_editor_url = reverse(
'api-plugin-ui-feature-list', kwargs={'feature': 'template_editor'}
)
@ -120,30 +177,39 @@ class UserInterfaceMixinTests(InvenTreeAPITestCase):
'template_model': 'part',
}
# Request custom template editor information
# Request custom label template editor information
response = self.get(template_editor_url, data=query_data_label)
self.assertEqual(1, len(response.data))
data = response.data[0]
for k, v in {
'plugin_name': 'sampleui',
'key': 'sample-template-editor',
'title': 'Sample Template Editor',
'source': '/static/plugins/sampleui/sample_template.js:getTemplateEditor',
}.items():
self.assertEqual(data[k], v)
# Request custom report template editor information
response = self.get(template_editor_url, data=query_data_report)
self.assertEqual(0, len(response.data))
# Request custom report template preview information
response = self.get(template_preview_url, data=query_data_report)
self.assertEqual(1, len(response.data))
# Check for the correct feature details here
self.assertEqual(response.data[0]['feature_type'], 'template_preview')
self.assertDictEqual(
response.data[0]['options'],
{
'key': 'sample-template-preview',
'title': 'Sample Template Preview',
'icon': 'category',
},
)
self.assertEqual(
response.data[0]['source'],
'/static/plugin/sample_template.js:getTemplatePreview',
)
data = response.data[0]
for k, v in {
'plugin_name': 'sampleui',
'feature_type': 'template_preview',
'key': 'sample-template-preview',
'title': 'Sample Template Preview',
'context': None,
'source': '/static/plugins/sampleui/sample_preview.js:getTemplatePreview',
}.items():
self.assertEqual(data[k], v)
# Next, disable the global setting for UI integration
InvenTreeSetting.set_setting(

View File

@ -572,16 +572,13 @@ class PluginsRegistry:
try:
self._init_plugin(plg, plugin_configs)
break
except IntegrationPluginError:
# Error has been handled downstream
pass
except Exception as error:
# Handle the error, log it and try again
handle_error(
error, log_name='init', do_raise=settings.PLUGIN_TESTING
)
if attempts == 0:
handle_error(
error, log_name='init', do_raise=settings.PLUGIN_TESTING
)
logger.exception(
'[PLUGIN] Encountered an error with %s:\n%s',
error.path,

View File

@ -1,30 +0,0 @@
{% load i18n %}
<h4>Custom Plugin Panel</h4>
<p>
This content has been rendered by a custom plugin, and will be displayed for any "part" instance
(as long as the plugin is enabled).
This content has been rendered on the server, using the django templating system.
</p>
<h5>Part Details</h5>
<table class='table table-striped table-condensed'>
<tr>
<th>Part Name</th>
<td>{{ part.name }}</td>
</tr>
<tr>
<th>Part Description</th>
<td>{{ part.description }}</td>
</tr>
<tr>
<th>Part Category</th>
<td>{{ part.category.pathstring }}</td>
</tr>
<tr>
<th>Part IPN</th>
<td>{% if part.IPN %}{{ part.IPN }}{% else %}<i>No IPN specified</i>{% endif %}</td>
</tr>
</table>

View File

@ -8,7 +8,6 @@ from django.utils.translation import gettext_lazy as _
from InvenTree.version import INVENTREE_SW_VERSION
from part.models import Part
from plugin import InvenTreePlugin
from plugin.helpers import render_template, render_text
from plugin.mixins import SettingsMixin, UserInterfaceMixin
@ -19,7 +18,7 @@ class SampleUserInterfacePlugin(SettingsMixin, UserInterfaceMixin, InvenTreePlug
SLUG = 'sampleui'
TITLE = 'Sample User Interface Plugin'
DESCRIPTION = 'A sample plugin which demonstrates user interface integrations'
VERSION = '1.1'
VERSION = '2.0'
ADMIN_SOURCE = 'ui_settings.js'
@ -50,39 +49,22 @@ class SampleUserInterfacePlugin(SettingsMixin, UserInterfaceMixin, InvenTreePlug
},
}
def get_ui_panels(self, instance_type: str, instance_id: int, request, **kwargs):
def get_ui_panels(self, request, context, **kwargs):
"""Return a list of custom panels to be injected into the UI."""
panels = []
context = context or {}
# First, add a custom panel which will appear on every type of page
# This panel will contain a simple message
content = render_text(
"""
This is a <i>sample panel</i> which appears on every page.
It renders a simple string of <b>HTML</b> content.
<br>
<h5>Instance Details:</h5>
<ul>
<li>Instance Type: {{ instance_type }}</li>
<li>Instance ID: {{ instance_id }}</li>
</ul>
""",
context={'instance_type': instance_type, 'instance_id': instance_id},
)
panels.append({
'name': 'sample_panel',
'label': 'Sample Panel',
'content': content,
})
target_model = context.get('target_model', None)
target_id = context.get('target_id', None)
# A broken panel which tries to load a non-existent JS file
if instance_id is not None and self.get_setting('ENABLE_BROKEN_PANElS'):
if target_id is not None and self.get_setting('ENABLE_BROKEN_PANElS'):
panels.append({
'name': 'broken_panel',
'label': 'Broken Panel',
'key': 'broken-panel',
'title': 'Broken Panel',
'source': '/this/does/not/exist.js',
})
@ -90,85 +72,131 @@ class SampleUserInterfacePlugin(SettingsMixin, UserInterfaceMixin, InvenTreePlug
# Note that we additionally provide some "context" data to the front-end render function
if self.get_setting('ENABLE_DYNAMIC_PANEL'):
panels.append({
'name': 'dynamic_panel',
'label': 'Dynamic Part Panel',
'key': 'dynamic-panel',
'title': 'Dynamic Panel',
'source': self.plugin_static_file('sample_panel.js'),
'icon': 'part',
'context': {
'version': INVENTREE_SW_VERSION,
'plugin_version': self.VERSION,
'random': random.randint(1, 100),
'time': time.time(),
},
'icon': 'part',
})
# Next, add a custom panel which will appear on the 'part' page
# Note that this content is rendered from a template file,
# using the django templating system
if self.get_setting('ENABLE_PART_PANELS') and instance_type == 'part':
if self.get_setting('ENABLE_PART_PANELS') and target_model == 'part':
try:
part = Part.objects.get(pk=instance_id)
part = Part.objects.get(pk=target_id)
except (Part.DoesNotExist, ValueError):
part = None
# Note: This panel will *only* be available if the part is active
if part and part.active:
content = render_template(
self, 'uidemo/custom_part_panel.html', context={'part': part}
)
panels.append({
'name': 'part_panel',
'label': 'Part Panel',
'content': content,
})
panels.append({
'key': 'part-panel',
'title': _('Part Panel'),
'source': self.plugin_static_file('sample_panel.js:renderPartPanel'),
'icon': 'part',
'context': {'part_name': part.name if part else ''},
})
# Next, add a custom panel which will appear on the 'purchaseorder' page
if (
self.get_setting('ENABLE_PURCHASE_ORDER_PANELS')
and instance_type == 'purchaseorder'
if target_model == 'purchaseorder' and self.get_setting(
'ENABLE_PURCHASE_ORDER_PANELS'
):
panels.append({
'name': 'purchase_order_panel',
'label': 'Purchase Order Panel',
'content': 'This is a custom panel which appears on the <b>Purchase Order</b> view page.',
'key': 'purchase_order_panel',
'title': 'Purchase Order Panel',
'source': self.plugin_static_file('sample_panel.js:renderPoPanel'),
})
# Admin panel - only visible to admin users
if request.user.is_superuser:
panels.append({
'key': 'admin-panel',
'title': 'Admin Panel',
'source': self.plugin_static_file(
'sample_panel.js:renderAdminOnlyPanel'
),
})
return panels
def get_ui_features(self, feature_type, context, request):
"""Return a list of custom features to be injected into the UI."""
if (
feature_type == 'template_editor'
and context.get('template_type') == 'labeltemplate'
):
return [
{
'feature_type': 'template_editor',
'options': {
'key': 'sample-template-editor',
'title': 'Sample Template Editor',
'icon': 'keywords',
},
'source': '/static/plugin/sample_template.js:getTemplateEditor',
}
]
def get_ui_dashboard_items(self, request, context, **kwargs):
"""Return a list of custom dashboard items."""
items = [
{
'key': 'broken-dashboard-item',
'title': _('Broken Dashboard Item'),
'description': _(
'This is a broken dashboard item - it will not render!'
),
'source': '/this/does/not/exist.js',
},
{
'key': 'sample-dashboard-item',
'title': _('Sample Dashboard Item'),
'description': _(
'This is a sample dashboard item. It renders a simple string of HTML content.'
),
'source': self.plugin_static_file('sample_dashboard_item.js'),
},
{
'key': 'dynamic-dashboard-item',
'title': _('Context Dashboard Item'),
'description': 'A dashboard item which passes context data from the server',
'source': self.plugin_static_file(
'sample_dashboard_item.js:renderContextItem'
),
'context': {'foo': 'bar', 'hello': 'world'},
'options': {'width': 3, 'height': 2},
},
]
if feature_type == 'template_preview':
# Admin item - only visible to users with superuser access
if request.user.is_superuser:
items.append({
'key': 'admin-dashboard-item',
'title': _('Admin Dashboard Item'),
'description': _('This is an admin-only dashboard item.'),
'source': self.plugin_static_file('admin_dashboard_item.js'),
'options': {'width': 4, 'height': 2},
'context': {'secret-key': 'this-is-a-secret'},
})
return items
def get_ui_template_editors(self, request, context, **kwargs):
"""Return a list of custom template editors."""
# If the context is a label template, return a custom template editor
if context.get('template_type') == 'labeltemplate':
return [
{
'feature_type': 'template_preview',
'options': {
'key': 'sample-template-preview',
'title': 'Sample Template Preview',
'icon': 'category',
},
'source': '/static/plugin/sample_template.js:getTemplatePreview',
'key': 'sample-template-editor',
'title': 'Sample Template Editor',
'icon': 'keywords',
'source': self.plugin_static_file(
'sample_template.js:getTemplateEditor'
),
}
]
return []
def get_ui_template_previews(self, request, context, **kwargs):
"""Return a list of custom template previews."""
return [
{
'key': 'sample-template-preview',
'title': 'Sample Template Preview',
'icon': 'category',
'source': self.plugin_static_file(
'sample_preview.js:getTemplatePreview'
),
}
]
def get_admin_context(self) -> dict:
"""Return custom context data which can be rendered in the admin panel."""
return {'apple': 'banana', 'foo': 'bar', 'hello': 'world'}

View File

@ -0,0 +1,20 @@
/**
* A sample dashboard item plugin for InvenTree.
*
* - This is a *very basic* example.
* - In practice, you would want to use React / Mantine / etc to render more complex UI elements.
*/
export function renderDashboardItem(target, data) {
if (!target) {
console.error("No target provided to renderDashboardItem");
return;
}
target.innerHTML = `
<h4>Admin Item</h4>
<hr>
<p>Hello there, admin user!</p>
`;
}

View File

@ -0,0 +1,49 @@
/**
* A sample dashboard item plugin for InvenTree.
*
* - This is a *very basic* example.
* - In practice, you would want to use React / Mantine / etc to render more complex UI elements.
*/
export function renderDashboardItem(target, data) {
if (!target) {
console.error("No target provided to renderDashboardItem");
return;
}
target.innerHTML = `
<h4>Sample Dashboard Item</h4>
<hr>
<p>Hello world! This is a sample dashboard item loaded by the plugin system.</p>
`;
}
export function renderContextItem(target, data) {
if (!target) {
console.error("No target provided to renderContextItem");
return;
}
let context = data?.context ?? {};
let ctxString = '';
for (let key in context) {
ctxString += `<tr><td>${key}</td><td>${context[key]}</td></tr>`;
}
target.innerHTML = `
<h4>Sample Context Item</h4>
<hr>
<p>Hello world! This is a sample context item loaded by the plugin system.</p>
<table>
<tbody>
<tr><th>Item</th><th>Value</th></tr>
${ctxString}
</tbody>
</table>
`;
}

View File

@ -43,6 +43,55 @@ export function renderPanel(target, data) {
}
/**
* Render a panel on a Part detail page
*/
export function renderPartPanel(target, data) {
if (!target) {
console.error("No target provided to renderPartPanel");
return;
}
target.innerHTML = `
<h4>Part Detail Panel</h4>
<hr>
<p>This is a custom panel for a Part detail page</p>
`;
}
/**
* Render a panel on a PurchaseOrder detail page
*/
export function renderPoPanel(target, data) {
if (!target) {
console.error("No target provided to renderPoPanel");
return;
}
target.innerHTML = `
<h4>Order Reference: ${data.instance?.reference}</h4>
<hr>
<p>This is a custom panel for a PurchaseOrder detail page</p>
`;
}
/**
* Render a panel that is only visible to admin users
*/
export function renderAdminOnlyPanel(target, data) {
if (!target) {
console.error("No target provided to renderAdminOnlyPanel");
return;
}
target.innerHTML = `Hello Admin user! This panel is only visible to admin users.`;
}
// Dynamically hide the panel based on the provided context
export function isPanelHidden(context) {

View File

@ -0,0 +1,12 @@
export function getTemplatePreview({ featureContext, pluginContext }) {
const { ref } = featureContext;
console.log("Template preview feature was called with", featureContext, pluginContext);
featureContext.registerHandlers({
updatePreview: (...args) => {
console.log("updatePreview", args);
}
});
ref.innerHTML = "<h1>Hello world</h1>";
}

View File

@ -18,16 +18,3 @@ export function getTemplateEditor({ featureContext, pluginContext }) {
ref.innerHTML = "";
ref.appendChild(t);
}
export function getTemplatePreview({ featureContext, pluginContext }) {
const { ref } = featureContext;
console.log("Template preview feature was called with", featureContext, pluginContext);
featureContext.registerHandlers({
updatePreview: (...args) => {
console.log("updatePreview", args);
}
});
ref.innerHTML = "<h1>Hello world</h1>";
}

View File

@ -35,7 +35,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase):
'packagename': 'invalid_package_name-asdads-asfd-asdf-asdf-asdf',
},
expected_code=400,
max_query_time=30,
max_query_time=60,
)
# valid - Pypi

Some files were not shown because too many files have changed in this diff Show More